无法使Python正则表达式反向引用工作

Nik*_*s R 2 python regex backreference

我想匹配Python文件的文档字符串.例如.

r""" Hello this is Foo
     """
Run Code Online (Sandbox Code Playgroud)

使用只"""应该足够开始.

>>> data = 'r""" Hello this is Foo\n     """'
>>> def display(m):
...     if not m:
...             return None
...     else:
...             return '<Match: %r, groups=%r>' % (m.group(), m.groups())
...
>>> import re
>>> print display(re.match('r?"""(.*?)"""', data, re.S))
<Match: 'r""" Hello this is Foo\n     """', groups=(' Hello this is Foo\n     ',)>
>>> print display(re.match('r?(""")(.*?)\1', data, re.S))
None
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么第一个表达式匹配而另一个不匹配?

mer*_*011 5

您正在使用转义序列\1而不是反向引用\1.

您可以通过更改为转义\之前来解决此问题1.

print display(re.match('r?(""")(.*?)\\1', data, re.S))
Run Code Online (Sandbox Code Playgroud)

你也可以通过使用正则表达式的原始字符串来修复它,没有转义序列.

print display(re.match(r'r?(""")(.*?)\1', data, re.S))
Run Code Online (Sandbox Code Playgroud)