首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >循环数学

循环数学
EN

Stack Overflow用户
提问于 2021-05-10 03:25:47
回答 1查看 65关注 0票数 2

如何计算匹配本身的数量以跳过某些字符?

示例:

我有:

(a(b(c)))

如果我运行这个regex:\(.+?\)

它将返回:(a(b(c)

但是我想要的是关闭循环的),也就是第三个。

我可以将?从正则表达式中删除,但是有一个问题:

例:\(.+\)(a)(a(b(c)))返回(a)(a(b(c)))

我想让group用()的闭环返回给我,也就是说,它应该向我返回2次匹配:

匹配1:(a)匹配2:(a(b(c)))

在比赛中数数是什么问题?好吧,我想的是,如果有任何方法可以计算出(传递了多少次才能知道应该跳过多少),那就是:

代码语言:javascript
代码运行次数:0
运行
复制
1   2   3   1 2 3
( a ( b ( c ) ) )

有人知道如何使用regex来完成这个任务吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-10 04:07:37

如果需要使用regex,请尝试递归regex (?R)

实现取决于语言,所以让我用python来解释它。

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/python

import regex

str ='(a)(a(b(c)))'

m = regex.findall(r'\((?:[^()]|(?R))+\)', str)
print(m)

输出:

代码语言:javascript
代码运行次数:0
运行
复制
['(a)', '(a(b(c)))']

正则表达式模式\((?:[^()]|(?R))+\)的解释

内部部件

  • [^()]匹配:
    • 一个或多个[^()](?R),其中除parentheses.
    • (?R)以外的任何字符都匹配表示整个regex \((?:[^()]|(?R))+\) recursively.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67464417

复制
相关文章

相似问题

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