怎么使用正则匹配前一个匹配条件和后一个匹配条件的数量一致

文盲老顾
WEB应用领新星创作者
博客专家认证
2017-07-20 04:56:02

// 使用同一个正则,怎么匹配出一下结果
string a = "((a+b)*c)"; // (a+b)*c
string b = "(c*(a+b))"; // c*(a+b)
string c = "((abc()))"; // abc()
...全文
374 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2017-07-27
  • 打赏
  • 举报
回复
恩,补充个更极端的例子,比如 (((a+b())+c())),需要保留的内容是(a+b())+c(),对于刚才我的正则,结果又变成.Groups[4].Captures[3]了
文盲老顾 2017-07-27
  • 打赏
  • 举报
回复
而匹配 ((((a+b)+c))),那么 .Groups[4].Captures[2] 才是我想保留的内容,即:(a+b)+c 这个写错了,是 而匹配 ((((a+b)+c))),那么 .Groups[4].Captures[1] 才是我想保留的内容,即:(a+b)+c
文盲老顾 2017-07-27
  • 打赏
  • 举报
回复
这个我也尝试了,但是适用性不强 比如 (((a+b())+c)),第一个分组的值是((a+b())+c),最外层的括号没有去干净 事实上,我是希望去掉所有外层匹配的对应字符,只要这些对应的字符内部包含非对应字符内容的信息 我尝试些了一个正则 ^((?'a'\())+([^\(\)]*|(?'a'\()|(?'b-a'\)))*(?(a)(?!))$ ,这个正则无法确切的获得我想要获取的内容 通过这个正则匹配 (((a+b())+c)) ,那么 .Groups[4].Captures[2] 才是我想保留的内容,即:(a+b())+c 而匹配 ((((a+b)+c))),那么 .Groups[4].Captures[2] 才是我想保留的内容,即:(a+b)+c 所以暂时我没有找到解决办法,继续求助 PS:上面的正则时参考 https://msdn.microsoft.com/zh-cn/library/bs2twtah(v=vs.110).aspx 平衡组定义弄出来的
q107770540 2017-07-21
  • 打赏
  • 举报
回复
\((((?<o>\()|(?<-o>)\)|[^()]+)*(?(o)(?!)))\) Groups[1].Value is what you want
文盲老顾 2017-07-20
  • 打赏
  • 举报
回复
详细的描述:在匹配中,可能会出现对应的字符情况,在html中相对简单,使用<(\w+)> 然后 </\1>引用即可 但现在的问题是不规则的对应关系,比如(和),{和},begin和end这样的,怎么判断对应关系中的字符或者字符串,把最外层的删除掉,只留中间的部分,但中间的部分出现对应字符时忽略

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧