re.match
закреплен в начале строки. Это не имеет ничего общего с новыми строками, поэтому это не то же самое, что использовать ^
в шаблоне.
Поскольку в документации re.match говорится:
Если ноль или более символов в начале строки соответствуют шаблону регулярного выражения, верните соответствующий экземпляр MatchObject
. Вернуть None
, если строка не соответствует шаблону; обратите внимание, что это отличается от совпадения нулевой длины.
Примечание. Если вы хотите найти соответствие в любом месте строки, используйте вместо этого search()
.
re.search
ищет всю строку, поскольку в документации указано :
Просканировать строку, ищущую место, где шаблон регулярного выражения создает совпадение, и возвращает соответствующий
MatchObject
. ВозвратNone
, если никакая позиция в строке не соответствует шаблону; обратите внимание, что это отличается от поиска совпадения нулевой длины в некоторой точке строки.Так что если вам нужно совпадение в начале строки или совпадение со всей строкой
match
. Это быстрее. В противном случае используйтеsearch
.В документации имеется специальный раздел для
match
vs.search
, который также охватывает многострочные строки:Python предлагает две различные примитивные операции, основанные на регулярных выражениях:
match
проверяет соответствие только в начале строки, в то время какsearch
проверяет соответствие в любом месте строки (это то, что делает Perl по умолчанию).Обратите внимание, что
match
может отличаться отsearch
даже при использовании регулярного выражения, начинающегося с'^'
:'^'
соответствует только в начале строки или в режимеMULTILINE
также сразу же после новой строки. Операция «match
» преуспевает , только если шаблон совпадает в начале строки независимо от режима или в исходной позиции, заданной необязательным аргументомpos
, независимо от того, предшествует ли эта строка новой строки .Теперь достаточно разговоров. Время, чтобы увидеть пример кода:
# example code: string_with_newlines = """something someotherthing""" import re print re.match('some', string_with_newlines) # matches print re.match('someother', string_with_newlines) # won't match print re.match('^someother', string_with_newlines, re.MULTILINE) # also won't match print re.search('someother', string_with_newlines) # finds something print re.search('^someother', string_with_newlines, re.MULTILINE) # also finds something m = re.compile('thing$', re.MULTILINE) print m.match(string_with_newlines) # no match print m.match(string_with_newlines, pos=4) # matches print m.search(string_with_newlines, re.MULTILINE) # also matches