>>> text =\
... """xyxyxy testmatch0
... xyxyxy testmatch1
... xyxyxy
... whyisthismatched1
... xyxyxy testmatch2
... xyxyxy testmatch3
... xyxyxy
... whyisthismatched2
... """
>>> re.findall("^\s*xyxyxy\s+([a-z0-9]+).*$", text, re.MULTILINE)
[u'testmatch0', u'testmatch1', u'whyisthismatched1', u'testmatch2', u'testmatch3', u'whyisthismatched2']
Так что мои ожидания заключались бы в том, чтобы не совпадать со строками, содержащими «whyisthismatched».
В документации Python re говорится следующее:
(Точка.) В режиме по умолчанию соответствует любому символу, кроме новой строки. Если был указан флаг DOTALL, он соответствует любому символу, включая новую строку.
Мой вопрос будет заключаться в том, действительно ли это ожидаемое поведение или ошибка. Если ожидается, что кто-то объяснит, почему эти строки совпадают и как я должен изменить свой шаблон, чтобы получить ожидаемое поведение:
[u'testmatch0', u'testmatch1', u'testmatch2', u'testmatch3']