Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich überlappende Übereinstimmungen mit Pythons „re.findall()' finden?
Überlappende Übereinstimmungen in Regex verstehen
Standardmäßig erfasst die findall()-Methode im re-Modul von Python keine überlappenden Übereinstimmungen innerhalb einer Zeichenfolge . Dieses Verhalten kann verwirrend sein, insbesondere wenn Übereinstimmungen aus aufeinanderfolgenden Zeichen bestehen.
Betrachten Sie den folgenden Code:
match = re.findall(r'\w\w', 'hello') print(match)
Ausgabe:
['he', 'll']
Dieses Muster entspricht zwei aufeinanderfolgenden Zeichen Wortzeichen (w). Wie erwartet werden er und ich zurückgebracht. Allerdings werden el und lo nicht erfasst, obwohl sie in der Zeichenfolge erscheinen.
Überlappende Übereinstimmungen überwinden
Um überlappende Übereinstimmungen zu erfassen, können wir eine Lookahead-Behauptung (?=) verwenden ...). Diese Behauptung entspricht einem bestimmten Muster, verbraucht jedoch keine Zeichen aus der Zeichenfolge. Stattdessen wird geprüft, ob die folgenden Zeichen mit der Behauptung übereinstimmen.
Zum Beispiel:
match1 = re.findall(r'(?=(\w\w))', 'hello') print(match1)
Ausgabe:
['he', 'el', 'll', 'lo']
In diesem Fall (?=(ww )) findet jede Stelle, an der zwei aufeinanderfolgende Wortzeichen vorhanden sind, ohne diese tatsächlich zu verbrauchen. Dadurch kann findall() sowohl überlappende als auch nicht überlappende Übereinstimmungen zurückgeben.
Erklärung
Der reguläre Ausdruck /(?=(ww)) kann wie folgt aufgeschlüsselt werden :
Mit diesem Ansatz können wir alle überlappenden Übereinstimmungen innerhalb einer Zeichenfolge effektiv erkennen, selbst wenn sie aus aufeinanderfolgenden Zeichen bestehen.
Das obige ist der detaillierte Inhalt vonWie kann ich überlappende Übereinstimmungen mit Pythons „re.findall()' finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!