如何计算匹配本身的数量以跳过某些字符?
示例:
我有:
(a(b(c)))
如果我运行这个regex:\(.+?\)
它将返回:(a(b(c)
但是我想要的是关闭循环的)
,也就是第三个。
我可以将?
从正则表达式中删除,但是有一个问题:
例:\(.+\)
到(a)(a(b(c)))
返回(a)(a(b(c)))
我想让group
用()的闭环返回给我,也就是说,它应该向我返回2次匹配:
匹配1:(a)
匹配2:(a(b(c)))
在比赛中数数是什么问题?好吧,我想的是,如果有任何方法可以计算出(
传递了多少次才能知道应该跳过多少)
,那就是:
1 2 3 1 2 3
( a ( b ( c ) ) )
有人知道如何使用regex来完成这个任务吗?
发布于 2021-05-09 20:07:37
如果需要使用regex,请尝试递归regex (?R)
。
实现取决于语言,所以让我用python
来解释它。
#!/usr/bin/python
import regex
str ='(a)(a(b(c)))'
m = regex.findall(r'\((?:[^()]|(?R))+\)', str)
print(m)
输出:
['(a)', '(a(b(c)))']
正则表达式模式\((?:[^()]|(?R))+\)
的解释
内部部件
[^()]
匹配:[^()]
或(?R)
,其中除parentheses.(?R)
以外的任何字符都匹配表示整个regex \((?:[^()]|(?R))+\)
recursively.https://stackoverflow.com/questions/67464417
复制相似问题