2014-04-14 123 views
2

我想匹配Python文件的文档字符串。例如。无法使Python正则表达式的引用正常工作

r""" Hello this is Foo 
    """ 

仅使用"""应该足够开始。

>>> 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 

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

回答

5

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

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

print display(re.match('r?(""")(.*?)\\1', data, re.S)) 

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

print display(re.match(r'r?(""")(.*?)\1', data, re.S)) 
+0

这实际上很难找到!在我看来,我很难认识到'r'('“”)(。*?)\'不是'r'?(“”“)(。*?)\ 1''。 – SethMMorton

0

我想你可能会错过re.DOTALLre.MULTILINE标志。在这种情况下,re.DOTALL应该允许您的正则表达式.*?以匹配换行符

相关问题