2014-04-14 4 views
2

Я хочу совместить docstrings файла 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

Вы используете escape-последовательность \1 вместо обратной ссылки \1.

Вы можете исправить это, перейдя на экраны \ до 1.

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

Вы также можете исправить это, используя необработанную строку для вашего регулярного выражения, без escape-последовательностей.

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

Это действительно сложно определить! На мой взгляд, мне было трудно распознать, что '' r? ("" ") (. *?) \ 1'' не был' r '? ("" ") (. *?) \ 1''. – SethMMorton

0

Я думаю, что вы, возможно, отсутствует в re.DOTALL или re.MULTILINE флаги. В этом случае re.DOTALL должно позволить вашему регулярному выражению .*? соответствовать новым символам, а также

 Смежные вопросы

  • Нет связанных вопросов^_^