首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 正則表達式提取最外層括號內容(支持嵌套)

     編輯:程式設計綜合問答

需求

字符串含中文半角括號,嵌套不定層數,需提取**最外層**括號內完整內容。例:

110kV1#母分開關由運行改熱備用(110kV1#母分備自投由信號改跳閘(1區),110kV1#母分保護由跳閘改信號(1區)),110kV1#母分開關由運行改熱備用(110kV1#母分備自投由信號改跳閘(1區),110kV1#母分保護由跳閘改信號(1區))

需匹配兩個最外層括號組:

(110kV1#母分備自投由信號改跳閘(1區),110kV1#母分保護由跳閘改信號(1區))
(110kV1#母分備自投由信號改跳閘(1區),110kV1#母分保護由跳閘改信號(1區))

平衡組正則(.NET 特有)

string pattern = @"\([^\(\)]*(((?'open'\()[^\(\)]*)+((?'-open'\))[^\(\)]*)+)*(?(open)(?!))[^\(\)]*\)";

原理解析

  • (?'open'\():捕獲左括號,壓入 open 組計數器。
  • (?'-open'\)):匹配右括號,彈出 open 計數器。
  • (?(open)(?!)):條件判斷,若 open 組非空(括號未平衡)則匹配失敗((?!) 永假)。
  • 整體匹配:最外層左括號 → 任意非括號字符 → 平衡組匹配嵌套括號 → 最外層右括號。

調用示例

Regex.Matches(text, pattern).Cast<Match>().ToList().ForEach(m => Console.WriteLine(m.Value));

注意

此正則依賴 .NET **平衡組** 特性,Java/JS/Python 不支持,需用遞歸下降解析器或手寫棧邏輯實現括號匹配。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved