首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex捕获值在括号内,值也包含括号。

Regex捕获值在括号内,值也包含括号。
EN

Stack Overflow用户
提问于 2013-06-20 18:13:32
回答 3查看 229关注 0票数 1

我想与以下案文相匹配:

代码语言:javascript
复制
(valuex) AnySingleWord (valuey)

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

代码语言:javascript
复制
((value1) AnySingleWord (value2)) AnySingleWord ((value3) AnySingleWord (value4))

那么我的valuex应该是

代码语言:javascript
复制
(value1) AnySingleWord (value2) 

valuey应该是

代码语言:javascript
复制
(value3) AnySingleWord (value4)

regex可以做一些事情,比如计算已通过的开括号数,并匹配直到找到正确的近括号吗?非常感谢。

PS:我可以将开/闭括号对的数目限制在2-3以内,如果这足够小,可以由Regex解决。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-20 18:30:27

是的,您可以使用以下模式:

代码语言:javascript
复制
\(((?>\((?<DEPTH>)|\)(?<-DEPTH>)|[^()]+)*(?(DEPTH)(?!)))\)

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-06-20 18:24:24

如果我正确地理解了您,那么一个非常简单的方法如下:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2013-06-20 18:31:14

你的判断力

代码语言:javascript
复制
(?<left>\(([^()]*(\([^()]*\))?[^()]*)+\))[^()]*(?<right>\([^()]*((\([^()]*\))?[^()]*)+\))

你的代码是

代码语言:javascript
复制
Match m=Regex.Match(inp,reg);
m.Groups["left"].Value;//left value
m.Groups["right"].Value;//rightvalue
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17220816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档