如何获取平衡括号组的内容

3

text:

text1 = 'xx(aa)(bb)xx'
text2 = 'xx(aa(bb))xx'

预期:

('aa', 'bb')  
('aa(bb)',  'bb')

我的方法,但它没有达到预期。

re.compile(r'\(\s?(.+?)\s?\)')
1个回答

5
您可以安装PyPi regex 模块并使用。
import regex

texts = ['xx(aa)(bb)xx', 'xx(aa(bb))xx']
rx = r'\(((?:[^()]++|(?R))*)\)'

for text in texts:
    print(regex.findall(rx, text, overlapped=True))

查看Python演示。输出:

['aa', 'bb']
['aa(bb)', 'bb']
\(((?:[^()]++|(?R))*)\) 正则表达式是一种 常见的 PCRE 兼容正则表达式,用于匹配嵌套括号之间的字符串,我添加了一个捕获组来获取括号之间的内容。
为了获取所有重叠的括号,将 overlapped=True 选项传递给 regex.findall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接