我有一个正则表达式\(((?>\((?<depth>)|\)(?<-depth>)|.?)*(?(depth)(?!)))\)
,允许您使用捕获组选择顶级括号中的所有表达式。
例子:
- 输入字符串:
3 + 2 * (1 + 1 - (2 + 4)) + 12 * 31 - ((1+1) - 14 + 1)
- 匹配:
(1 + 1 - (2 + 4))
,((1+1) - 14 + 1)
我想使用这些匹配项拆分输入字符串Regex.Split()
。但是,我得到没有括号的表达式:
3 + 2 *
1 + 1 - (2 + 4)
- 没有大括号+ 12 * 31 -
(1+1) - 14 + 1
- 没有大括号
据我了解,它显示了捕获组本身,但是如何确保括号仍然存在?
Regex.Split()
将字符串拆分为多个部分,同时保留捕获的子字符串。由于原始表达式中未捕获外括号,因此结果中缺少它们。您可以将括号模式放在捕获子模式中:
查看表达式如何工作的示例:
C#: