Два других момента, о которых стоит упомянуть: ^
является избыточным при использовании re.match()
, а если вы хотите сопоставить конец строки, используйте r "\Z"
, а не "$".
Почему $ это зло: Предположим, мы хотим проверить, что вся строка s
соответствует некоторому шаблону foo
. Мы не хотим называть это совпадением, если после шаблона есть что-то. Посмотрим, что произойдет, если после шаблона появится новая строка.
>>> import re
>>> s = 'foo\n'
>>> re.match('foo$', s)
<_sre.SRE_Match object at 0x00BAFE90> # match -- FAIL!
>>> re.match('foo\Z', s) # no match -- OK
>>>
Вот выдержки из документов :
Документы для $
: Соответствует концу строки или непосредственно перед новой строкой в конце строки ... это использует режимы по умолчанию и является ничего общего с режимом MULTILINE.
Документы для \Z
: Соответствует только в конце строки . Ничего общего с модами и не пугающими новыми строками.