Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall()' keine überlappenden Regex-Übereinstimmungen zurück und wie kann ich das beheben?
In der Welt der regulären Ausdrücke kann es rätselhaft sein zu verstehen, warum bestimmte Übereinstimmungen möglicherweise nicht gefunden werden. Betrachten Sie das folgende Beispiel:
match = re.findall(r'\w\w', 'hello') print(match)
Wie erwartet gibt dieses Snippet eine Liste mit „he“ und „ll“ zurück, die dem Muster von Zwei-Buchstaben-Sequenzen entsprechen. Allerdings könnte man sich fragen, warum „el“ und „lo“, die ebenfalls zum Muster zu passen scheinen, nicht im Ergebnis enthalten sind.
Dieses Verhalten ist auf das Standardverhalten der Funktion re.findall zurückzuführen, die erzeugt keine überlappenden Übereinstimmungen. Mit anderen Worten, es bewegt sich entlang der Zeichenfolge, findet nur die erste Übereinstimmung für ein bestimmtes Muster und berücksichtigt keine möglichen Überlappungen.
Um dieses Problem zu beheben, gibt es eine clevere Problemumgehung mit Lookahead-Behauptungen. Eine Lookahead-Behauptung (?=...) stimmt mit einem Muster überein, ohne tatsächlich einen Teil der Zeichenfolge zu verbrauchen. Dadurch können wir alle überlappenden Übereinstimmungen finden, die dem gegebenen Muster entsprechen.
Um beispielsweise alle Zwei-Buchstaben-Sequenzen in der Zeichenfolge „Hallo“ mithilfe einer Lookahead-Behauptung zu finden, kann der folgende Ausdruck verwendet werden:
re.findall(r'(?=(\w\w))', 'hello')
Dieser Ausdruck gibt eine Liste zurück, die ['he', 'el', 'll', 'lo'] enthält, da jede Zwei-Buchstaben-Sequenz ohne Erfolg erfolgreich abgeglichen wird Überlappung.
Das Verständnis von Lookahead-Behauptungen und ihrer praktischen Anwendungen kann die Effektivität regulärer Ausdrücke für komplexe Matching-Szenarien erheblich verbessern.
Das obige ist der detaillierte Inhalt vonWarum gibt „re.findall()' keine überlappenden Regex-Übereinstimmungen zurück und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!