用正则表达式查找括号之间的字符

时间:2014-04-03 16:02:35

标签: regex regular-language

我试图处理带有大量括号的字符串中的文本,所以我想我会使用正则表达式来完成它。

我一直在寻找并找到了一个很好的解决方案:

Finding All Characters Between Parentheses with a .NET Regex

并将其改编为我的代码:

\(([^(]+)\)

尝试使用此代码时:

string s = "(hey (brother)) and (hey sister)";
string p = "\\(([^(]+)\\)";
Match m = Regex.Match(s, p);
Console.Write(m.Value+"\n");

我得到以下结果:

(brother))

我想表达停下来找到第一个")"而且它没有这样做。任何人都可以帮我解决问题吗?

2 个答案:

答案 0 :(得分:0)

如果你想到达一个,那么你还需要排除结束字符:

\(([^()]+)\)

答案 1 :(得分:0)

你的正则表达式试图在)字符停止之前匹配尽可能多的字符。您的字符串中有三个)个字符,但从b开始,正则表达式与第三个)不匹配,因为(与第三个b之间存在) ([ ]不适合)括号之间的模式。但是你的正则表达式可以(并且确实)使用第二个)来匹配其模式中的)

请注意,在您链接到的页面上,您获得此regexp的答案明确表示当括号嵌套在彼此内部时它将无效。

如果您编写正则表达式,可以强制正则表达式匹配第一个\(([^()]+)\) 而不是第二个{

{{1}}