我试图处理带有大量括号的字符串中的文本,所以我想我会使用正则表达式来完成它。
我一直在寻找并找到了一个很好的解决方案:
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))
我想表达停下来找到第一个")"而且它没有这样做。任何人都可以帮我解决问题吗?
答案 0 :(得分:0)
如果你想到达一个,那么你还需要排除结束字符:
\(([^()]+)\)
答案 1 :(得分:0)
你的正则表达式试图在)
字符停止之前匹配尽可能多的字符。您的字符串中有三个)
个字符,但从b
开始,正则表达式与第三个)
不匹配,因为(
与第三个b
之间存在)
(
,[ ]
不适合)
括号之间的模式。但是你的正则表达式可以(并且确实)使用第二个)
来匹配其模式中的)
。
请注意,在您链接到的页面上,您获得此regexp的答案明确表示当括号嵌套在彼此内部时它将无效。
如果您编写正则表达式,可以强制正则表达式匹配第一个\(([^()]+)\)
而不是第二个{
{{1}}