这是我的模式:(TABLE[0-9]+)\(((?<=\()(.*?)(?=\)))[(?=\))\)]
这是我正在查看的字符串:(TABLE3(1.6+TABLE1(2)))*TABLE2(1)*TABLE11(1)*(1.19017735023328)
我得到的是:
- 表3(1.6+表1(2)
- 表2(1)
- 表11(1)
我需要第一个是:TABLE3(1.6+TABLE1(2))
我该怎么做?
最佳答案
使用 balancing group在 TABLE[0-9]+
之后构建:
TABLE[0-9]+\((?>[^()]|(?<o>)\(|(?<-o>)\))*(?(o)(?!))\)
请参阅regex demo .
详细信息
-
TABLE[0-9]+
- 匹配TABLE
和 1+ 位数字 -
\(
- 开放(
-
(?>[^()]|(?<o>)\(|(?<-o>)\))*
- 零次或多次出现-
[^()]
- 除(
之外的任何字符和)
-
|
- 或 -
(?<o>)\(
- 一个(
(并增加o
组的堆栈) -
|
- 或 -
(?<-o>)\)
- 一个)
(并减少o
组的堆栈)
-
-
(?(o)(?!))
- 如果组o
则匹配失败(触发回溯)堆栈不为空 -
\)
- 一个)
。
关于c# - 正则表达式在另一个带括号的字符串中查找带括号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920676/