Skip to main content
 首页 » 编程设计

c#之正则表达式平衡组

2024年02月02日31mfryf

我正在尝试匹配字符串中的平衡括号 ({})。例如,我想平衡以下内容:

if (a == 2) 
{ 
  doSomething(); 
  {  
     int x = 10; 
  } 
} 
 
// this is a comment 
 
while (a <= b){ 
  print(a++); 
}  

我从 MSDN 想出了这个正则表达式,但效果不佳。我想提取 {} 的多个嵌套匹配集。我只对父匹配感兴趣

   "[^{}]*" + 
   "(" +  
   "((?'Open'{)[^{}]*)+" + 
   "((?'Close-Open'})[^{}]*)+" + 
   ")*" + 
   "(?(Open)(?!))"; 

请您参考如下方法:

你很接近。

改编自 this question 上的第二个答案(我将其用作我的规范“在 C#/.NET 正则表达式引擎中平衡 xxx”答案,如果它对您有帮助,请点赞!它在过去帮助过我):

var r = new Regex(@" 
[^{}]*                  # any non brace stuff. 
\{(                     # First '{' + capturing bracket 
    (?:                  
    [^{}]               # Match all non-braces 
    | 
    (?<open> \{ )       # Match '{', and capture into 'open' 
    | 
    (?<-open> \} )      # Match '}', and delete the 'open' capture 
    )+                  # Change to * if you want to allow {} 
    (?(open)(?!))       # Fails if 'open' stack isn't empty! 
)\}                     # Last '}' + close capturing bracket 
"; RegexOptions.IgnoreWhitespace);