2014-04-14 57 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應該允許您的正則表達式.*?以匹配換行符

相關問題