re.match
закрепляется в начале строки. Это не имеет ничего общего с символами новой строки, поэтому это не то же самое, что использование ^
в шаблоне.
Как указано в документации re.match :
Если ноль или более символов на
начало строки соответствует шаблону регулярного выражения, возвращает
соответствующий MatchObject
экземпляр.
Вернуть None
, если строка не
соответствовать шаблону; обратите внимание, что это
отличается от совпадения нулевой длины.
Примечание: если вы хотите найти совпадение
в любом месте строки используйте search()
вместо этого.
re.search
ищет всю строку, так как документация гласит :
Сканирование через строку в поисках
место, где регулярное выражение
шаблон производит совпадение и возвращает
соответствующий MatchObject
экземпляр.
Вернуть None
, если в
строка соответствует шаблону; Обратите внимание, что
это отличается от поиска
совпадение нулевой длины в некоторой точке
строка.
Так что, если вам нужно сопоставить начало строки или полностью всю строку, используйте match
. Это быстрее. В противном случае используйте search
.
В документации есть специальный раздел для match
против 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