Ich weiß, dieses Thema wurde schon diskutiert multipletimes hier auf StackOverflow, aber ich bin auf der Suche nach einer besseren Antwort.Warum haben re.match()?
Während ich die differences schätzen, ich war nicht wirklich in der Lage eine definitive Erklärung warum das re
Modul in Python sowohl match()
und search()
bietet zu finden. Konnte ich nicht das gleiche Verhalten mit search()
erhalten, wenn ich ^
im Einzelzeilenmodus und /A
im Mehrzeilenmodus voranstellen? Fehle ich etwas?
Ich habe versucht, die Umsetzung Blick auf die _sre.c Code zu verstehen, und ich verstehe, dass die Suche (sre_search()
) tatsächlich umgesetzt wird, um den Zeiger in der Zeichenfolge Bewegen des sre_match()
auf sie gesucht werden, und die Anwendung, bis eine Übereinstimmung gefunden wird.
Also ich denke, dass die re.match()
Verwendung könnte als die entsprechenden regulären Ausdruck etwas schneller (mit ^
oder /A
) mit dem re.search()
. Ist das der Grund?
Ich recherchierte auch die Python-Dev-ML-Archive, aber ohne Erfolg.
>>> string="""first line
... second line"""
>>> print re.match('first', string, re.MULTILINE)
<_sre.SRE_Match object at 0x1072ae7e8>
>>> print re.match('second', string, re.MULTILINE)
None
>>> print re.search('\Afirst', string, re.MULTILINE)
<_sre.SRE_Match object at 0x1072ae7e8>
>>> print re.search('\Asecond', string, re.MULTILINE)
None
Ein schneller Versuch schlägt tatsächlich vor, dass "Übereinstimmung" langsamer ist: http://pastebin.com/VABXxY3H – Evpok
@vks nein, 're.match (r '[\ s \ S] *'," foo \ nbar ") .group() ' –
@AvinashRaj' Beachten Sie, dass re.match() auch im MULTILINE-Modus nur am Anfang der Zeichenfolge und nicht am Anfang jeder Zeile passt. https://docs.python.org /2/library/re.html – vks