Я не получаю значения нескольких шаблонов регулярных выражений Java [duplicate]

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

52
задан 17 revs, 12 users 32% 8 April 2014 в 21:11
поделиться