Python中如何实现正则表达式的平衡组?
平衡组的语法用于 re 的表达式中会报错,请问是否有其他可替代方法?
Python中如何实现正则表达式的平衡组?
1 回复
Python的标准库re模块不支持平衡组。要匹配嵌套结构(比如括号),你得用regex第三方库,它支持(?R)或(?0)进行递归匹配。
举个例子,匹配嵌套的圆括号并提取最外层内容:
import regex
text = "a (b (c) d) e (f) g"
pattern = r'\( (?: [^()]+ | (?R) )* \)'
matches = regex.findall(pattern, text, flags=regex.VERBOSE)
print(matches) # 输出: ['(b (c) d)', '(f)']
这里(?R)就代表递归整个模式。regex.VERBOSE允许用空格和注释让正则更可读。
如果你不想装第三方库,对于简单的固定层数嵌套,可以用标准re硬写,比如两层括号:r'\([^()]*\([^()]*\)[^()]*\)',但复杂情况还是得上regex。
总结:用regex库的递归。

