2014-04-03 134 views
0

我正在尝试使用大量圆括号处理字符串中的文本,所以我认为我会使用正则表达式来执行此操作。用正则表达式在圆括号之间寻找字符

我一直在寻找,发现在这里很好的解决方案:

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

斑点网可以做'平衡group'计数结构。你是否试图解析所有文本,比如'hey' _and_' brother'?或者只是内部(非嵌套)文本? – sln

回答

0

你的正则表达式是尝试它停在)字符之前匹配尽可能多的字符,因为它可以。有三个) cahracters在你的字符串,但b开始因为b和第三)之间的((不适合[ ]括号中的模式正则表达式无法比拟的第三)。但你的正则表达式可以(并且)使用第二个)来匹配其模式中的)

请注意,在您链接到的页面上,您从中获得此正则表达式的答案明确指出,当括号嵌套在对方内时,它不起作用。

您可以强制正则表达式,如果你写的正则表达式,从而匹配第一)而不是第二:

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

,如果你想,当你到一个停止您还需要排除年底括号字符:

\(([^()]+)\) 
相关问题