我想匹配以下文字:
(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解决
答案 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