【问题标题】:Matching outermost parentheses匹配最外面的括号
【发布时间】:2021-09-05 18:33:48
【问题描述】:

假设我有这样的文字

compute(max(a,b), min(c,d)) - fix(e)

我要提取两个字符串,最外面的括号:

(max(a,b), min(c,d))

(e)

在 .NET 中使用正则表达式。我已经尝试了几种解决方案,但都没有达到预期的效果:

  • \((?:[^()]|(?<open> \( )|(?<-open> \) ))+(?(open)(?!))\) 匹配 (a,b)(c,d)(e)
  • \([^\(\)]+?\) 也一样
  • \(.+\) 匹配 (max(a,b), min(c,d)) - fix(e)
  • \(.+?\) 匹配 (max(a,b)(c,d)(e)

我找不到说“如果你匹配一个左括号并且你在括号内忽略它,但继续”。如何匹配所有且仅匹配最外层的括号?

【问题讨论】:

    标签: regex .net-core


    【解决方案1】:

    你快到了,空格在正则表达式中有意义。

    您可以将模式更新为

    \((?:[^()]|(?<open>\()|(?<-open>\)))+(?(open)(?!))\)
    

    .NET regex demo

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多