簡體   English   中英

正則表達式匹配嵌套的括號,包括開始和結束括號

[英]RegEx to match nested parentheses including the start and end parentheses

string st = "this (a,b) and this (s,(r,t),u) is a test";
var regex = new Regex(@"\(([^()]+| (?<Level>\()| (?<-Level>\)))+(?(Level)(?!))\)", RegexOptions.IgnorePatternWhitespace);

foreach (Match c in regex.Matches(input))
{
  Console.WriteLine(c.Value.Trim('(', ')'));
}

NET 4.5中的上述C#代碼正確返回:

a,b
s,(r,t),u

但是我需要包含括號的輸出為:

(a,b)
(s,(r,t),u)

您不能使用正則表達式執行此操作。

您可以以貪婪或懶惰的方式使用正則表達式,但不能應用邏輯來處理括號的平衡。

如果使用\\(.*\\) ,則將捕獲從第一個到最后一個括號的所有內容(貪婪);如果您使用\\(.*?\\) (惰性或不貪婪的),則將匹配第一個到第二個。 正則表達式不是匹配嵌入式字符串的正確工具(這就是為什么匹配嵌入式xhtml標記也不是一個好主意的原因)。

恕我直言,您應該在for循環中使用簡單的余額算法。 但是,如果您仍然想使用正則表達式,則可以檢查此線程

如果我理解正確,那么您當前的輸出為:

a,b
s,(r,t),u

由於您正在使用Trim('(', ')')因此會刪除外部括號-要使用它們,請使用以下括號:

Console.WriteLine(c.Value)

結果:

(a,b)
(s,(r,t),u)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM