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库的递归。

回到顶部