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
person
nosklo
schedule
08.10.2008