正则表达式语言不是正则语言,因此无法通过正则表达式将其可靠地分割成有意义的部分(请参阅RegEx 匹配除 XHTML 自包含标签之外的开放标签 https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tagsHTML 的情况相同)。
为什么不使用 Python 自己的解析器来做到这一点呢?
>>> r="whate(ever)(?:\\1)"
>>> import sre_parse #the module used by `re' internally for regex parsing
>>> sre_parse.parse(r)
[('literal', 119), ('literal', 104), ('literal', 97), ('literal', 116),
('literal', 101), ('subpattern', (1, [('literal', 101), ('literal', 118), ('lit
eral', 101), ('literal', 114)])), ('subpattern', (None, [('groupref', 1)]))]
正如你所看到的,这是一个解析树,你感兴趣的是subpattern
节点与非None
在第一个元素和groupref
's.