re.matchist 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 MatchObjectInstanz zurück. Rückgabe, Nonewenn 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.searchdurchsucht 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 MatchObjectInstanz zurück. Rückgabe, Nonewenn 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 matchvs.search , der auch mehrzeilige Zeichenfolgen abdeckt:
Python bietet zwei verschiedene primitive Operationen basierend auf regulären Ausdrücken: matchprüft , ob ein Spiel
erst am Anfang der Zeichenfolge, während searchprü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 , matchabweichen 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'^''^'MULTILINEmatchpos
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