当前位置:  开发笔记 > 编程语言 > 正文

如何提取括号(圆括号)之间的文本?

如何解决《如何提取括号(圆括号)之间的文本?》经验,为你挑选了8个好方法。

我有一个字符串User name (sales),我想在括号之间提取文本,我该怎么做?

我怀疑子字符串,但我无法弄清楚如何阅读,直到结束括号,文本的长度会有所不同.



1> Diadistis..:

一个非常简单的方法是使用正则表达式:

Regex.Match("User name (sales)", @"\(([^)]*)\)").Groups[1].Value

作为对(非常有趣的)评论的回应,这里有相同的正则表达式,并有一些解释:

\(             # Escaped parenthesis, means "starts with a '(' character"
    (          # Parentheses in a regex mean "put (capture) the stuff 
               #     in between into the Groups array" 
       [^)]    # Any character that is not a ')' character
       *       # Zero or more occurrences of the aforementioned "non ')' char"
    )          # Close the capturing group
\)             # "Ends with a ')' character"


我喜欢它,当人们说"一种简单的方法是使用正则表达式"然后提供相当于一串难以理解的象形文字时(当不同的人建议正则表达式时,它们特别有趣,并且每个人都会针对同一问题提出不同的象形文字集).:)
在堆栈上没有足够的答案实际上_解释正在发生的事情._谢谢你的精彩解释.
@ rank1你必须逃避括号.@这里提供的是你不需要逃避反斜杠.所以没有@就像"\\\(([^]]*)\\\)".

2> Jelly Ama..:

如果你想远离正则表达式,我能想到的最简单的方法是:

string input = "User name (sales)";
string output = input.Split('(', ')')[1];


老实说,这应该被选为答案.
如果你想使用相同的逻辑来选择多个:`var input ="(fdw)用户名(销售)safdsdf(再次?)"; var output = input.Split('(',')').其中((item,index)=> index%2!= 0).ToList();`

3> Ross Goddard..:

假设你只有一对括号.

string s = "User name (sales)";
int start = s.IndexOf("(") + 1;
int end = s.IndexOf(")", start);
string result = s.Substring(start, end - start);


如果你想要"销售"而不是(销售),则子串中的start + 1更正确

4> artfulhacker..:

使用此功能:

public string GetSubstringByString(string a, string b, string c)
    {
        return c.Substring((c.IndexOf(a) + a.Length), (c.IndexOf(b) - c.IndexOf(a) - a.Length));
    }

这是用法:

GetSubstringByString("(", ")", "User name (sales)")

输出将是:

sales



5> Jennifer..:

正则表达式可能是这里最好的工具.如果你不熟悉它们,我建议你安装Expresso - 一个很棒的小正则表达式工具.

就像是:

Regex regex = new Regex("\\((?\\w+)\\)");
string incomingValue = "Username (sales)";
string insideBrackets = null;
Match match = regex.Match(incomingValue);
if(match.Success)
{
    insideBrackets = match.Groups["TextInsideBrackets"].Value;
}



6> Nick Allen..:
string input = "User name (sales)";

string output = input.Substring(input.IndexOf('(') + 1, input.IndexOf(')') - input.IndexOf('(') - 1);



7> chills42..:

一个正则表达式可能吗?我认为这会奏效......

\(([a-z]+?)\)



8> 小智..:
using System;
using System.Text.RegularExpressions;

private IEnumerable GetSubStrings(string input, string start, string end)
{
    Regex r = new Regex(Regex.Escape(start) +`"(.*?)"`  + Regex.Escape(end));
    MatchCollection matches = r.Matches(input);
    foreach (Match match in matches)
    yield return match.Groups[1].Value;
}

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有