re.match
è ancorato all'inizio della stringa. Non ha nulla a che fare con le nuove linee, quindi non è lo stesso che usare ^
nel modello.
Come dice la documentazione di re.match :
Se zero o più caratteri
all'inizio della stringa corrispondono al modello di espressione regolare, restituisce MatchObject
un'istanza corrispondente . Restituisce None
se la stringa non corrisponde al modello; si noti che questo è diverso da una corrispondenza di lunghezza zero.
Nota: se si desidera individuare una corrispondenza in qualsiasi punto della stringa, utilizzare search()
invece.
re.search
cerca l'intera stringa, come dice la documentazione :
Scansione attraverso la stringa alla ricerca di una posizione in cui il modello di espressione regolare produce una corrispondenza e restituisce MatchObject
un'istanza corrispondente . Restituisce None
se nessuna posizione nella stringa corrisponde al modello; nota che questo è diverso dal trovare una corrispondenza di lunghezza zero in qualche punto della stringa.
Quindi, se hai bisogno di abbinare all'inizio della stringa, o per abbinare l'intera stringa usa match
. È più veloce. Altrimenti usa search
.
La documentazione ha una sezione specifica per match
vs.search
che copre anche le stringhe multilinea:
Python offre due diverse operazioni primitive basate su espressioni regolari: match
controlla una corrispondenza
solo all'inizio della stringa, mentre search
controlla una corrispondenza in
qualsiasi punto della stringa (questo è ciò che Perl fa di default).
Si noti che match
può differire search
anche quando si utilizza un'espressione regolare che inizia con '^'
: '^'
corrisponde solo all'inizio della stringa o in
MULTILINE
modalità anche immediatamente dopo una nuova riga. L' match
operazione " " ha esito positivo solo se il modello corrisponde all'inizio della stringa
indipendentemente dalla modalità o nella posizione iniziale indicata pos
dall'argomento facoltativo indipendentemente dal fatto che una nuova riga la precede.
Adesso basta parlare. È ora di vedere qualche codice di esempio:
# 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