正则表达式在括号

时间:2017-08-28 13:51:24

标签: c# regex

这是我的模板:(TABLE[0-9]+)\(((?<=\()(.*?)(?=\)))[(?=\))\)]

这是我正在查看的字符串:(TABLE3(1.6+TABLE1(2)))*TABLE2(1)*TABLE11(1)*(1.19017735023328)

我得到的是:

  • 表3(1.6 + TABLE1(2)
  • TABLE2(1)
  • 表11(1)

我需要第一个:TABLE3(1.6 + TABLE1(2))

我该怎么做?

1 个答案:

答案 0 :(得分:3)

TABLE[0-9]+之后使用here构造:

TABLE[0-9]+\((?>[^()]|(?<o>)\(|(?<-o>)\))*(?(o)(?!))\)

请参阅balancing group

regex demo

<强>详情

  • TABLE[0-9]+ - 匹配TABLE和1+位数
  • \( - 开放(
  • (?>[^()]|(?<o>)\(|(?<-o>)\))* - 零次或多次出现
    • [^()] - 除()
    • 之外的任何字符
    • | - 或
    • (?<o>)\( - ((并增加o组的堆栈)
    • | - 或
    • (?<-o>)\) - )(并递减o组的堆栈)
  • (?(o)(?!)) - 如果组o堆栈不为空,则失败匹配(触发回溯)
  • \) - )