正则表达式在括号内捕获值,值也包含括号

时间:2013-06-20 18:13:33

标签: c# regex pattern-matching brackets curly-braces

我想匹配以下文字:

(valuex) AnySingleWord (valuey)

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

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

然后我的 valuex 应为

(value1) AnySingleWord (value2) 

valuey 应为

(value3) AnySingleWord (value4)

正则表达式可以做一些事情,比如计算已经过去的开括号的数量,并匹配东西,直到找到右关闭括号?非常感谢。

PS:我可以将打开/关闭括号对的数量限制为2-3,如果这个数量小到可以由Regex解决

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

你的正则表达式是

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

您的代码将是

Match m=Regex.Match(inp,reg);
m.Groups["left"].Value;//left value
m.Groups["right"].Value;//rightvalue