re.match
ist am Anfang der Zeichenfolge verankert. Das hat nichts mit Zeilenumbrüchen zu tun, daher ist es nicht dasselbe wie ^
im Muster.
In der Dokumentation zu re.match heißt es:
Wenn null oder mehr Zeichen am
Anfang der Zeichenfolge mit dem Muster des regulären Ausdrucks übereinstimmen, geben Sie eine entsprechende MatchObject
Instanz zurück. Rückgabe, None
wenn die Zeichenfolge nicht mit dem Muster übereinstimmt; Beachten Sie, dass sich dies von einer Übereinstimmung mit der Länge Null unterscheidet.
Hinweis: Wenn Sie eine Übereinstimmung an einer beliebigen Stelle in der Zeichenfolge suchen möchten, verwenden Sie search()
stattdessen.
re.search
durchsucht die gesamte Zeichenfolge, wie in der Dokumentation angegeben :
Durchsuchen Sie die Zeichenfolge nach einer Stelle, an der das Muster des regulären Ausdrucks eine Übereinstimmung erzeugt, und geben Sie eine entsprechende MatchObject
Instanz zurück. Rückgabe, None
wenn keine Position in der Zeichenfolge mit dem Muster übereinstimmt; Beachten Sie, dass dies anders ist als das Finden einer Übereinstimmung mit der Länge Null an einem bestimmten Punkt in der Zeichenfolge.
Wenn Sie also am Anfang der Zeichenfolge übereinstimmen müssen oder die gesamte Zeichenfolge verwenden möchten, verwenden Sie match
. Es ist schneller. Andernfalls verwenden search
.
Die Dokumentation enthält einen speziellen Abschnitt für match
vs.search
, der auch mehrzeilige Zeichenfolgen abdeckt:
Python bietet zwei verschiedene primitive Operationen basierend auf regulären Ausdrücken: match
prüft , ob ein Spiel
erst am Anfang der Zeichenfolge, während search
prüft , ob ein Spiel
irgendwo im String (das ist , was Perl standardmäßig der Fall ist).
Beachten Sie, dass dies
auch bei Verwendung eines regulären Ausdrucks, der mit : beginnt , match
abweichen kann. Übereinstimmungen nur am Anfang der Zeichenfolge oder im
Modus auch unmittelbar nach einer neuen Zeile. Die Operation " " ist nur erfolgreich, wenn das Muster
unabhängig vom Modus am Anfang der Zeichenfolge oder an der durch das optionale
Argument angegebenen Startposition übereinstimmt, unabhängig davon, ob eine neue Zeile davor steht.search
'^'
'^'
MULTILINE
match
pos
Jetzt genug geredet. Zeit, einen Beispielcode zu sehen:
# 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