2014-04-03 166 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

,如果你想,當你到一個停止您還需要排除年底括號字符:

\(([^()]+)\) 
相關問題