文本:
text1 = 'xx(aa)(bb)xx'
text2 = 'xx(aa(bb))xx'
Run Code Online (Sandbox Code Playgroud)
期待:
('aa', 'bb')
('aa(bb)', 'bb')
Run Code Online (Sandbox Code Playgroud)
我的方法,但没有达到预期。
re.compile(r'\(\s?(.+?)\s?\)')
Run Code Online (Sandbox Code Playgroud)
您可以安装PyPiregex模块并使用
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))
Run Code Online (Sandbox Code Playgroud)
请参阅Python 演示。输出:
['aa', 'bb']
['aa(bb)', 'bb']
Run Code Online (Sandbox Code Playgroud)
正则表达式\(((?:[^()]++|(?R))*)\)是一个常见的符合 PCRE 的正则表达式,它匹配嵌套配对括号之间的字符串,我为括号之间的内容添加了一个捕获组。
要获取所有重叠的括号,该overlapped=True选项被传递给regex.findall。