1

我想匹配以下文本:

(valuex) AnySingleWord (valuey)

我想在括号内捕获valuex,valuey的文本。困难的是valuex,valuey都可以包含括号。例如

((value1) AnySingleWord (value2)) AnySingleWord ((value3) AnySingleWord (value4))

那么我的valuex应该是

(value1) AnySingleWord (value2) 

有价值的应该是

(value3) AnySingleWord (value4)

正则表达式可以做一些事情,比如计算已通过的左括号的数量,然后匹配直到找到右右括号吗?非常感谢。

PS:我可以将开/关括号对的数量限制为 2-3,如果这足够小可以通过正则表达式解决

4

3 回答 3

2

是的,您可以使用这种模式:

\(((?>\((?<DEPTH>)|\)(?<-DEPTH>)|[^()]+)*(?(DEPTH)(?!)))\)

关于这种模式的更多信息在这里:

http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspx

于 2013-06-20T18:30:27.483 回答
1

如果我理解正确,一个非常简单的方法如下:

1. iterate through characters
2. find first left brace
3. count braces until non-paired right brace appears and store index
4. take the substring from zero to that index and set as value x
5. delete value x substring
6. go to step 1 and store next part as value y
于 2013-06-20T18:24:24.207 回答
1

你的正则表达式是

(?<left>\(([^()]*(\([^()]*\))?[^()]*)+\))[^()]*(?<right>\([^()]*((\([^()]*\))?[^()]*)+\))

你的代码是

Match m=Regex.Match(inp,reg);
m.Groups["left"].Value;//left value
m.Groups["right"].Value;//rightvalue
于 2013-06-20T18:31:14.973 回答