Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich überlappende Übereinstimmungen mit Pythons „re.findall()' finden?

Wie kann ich überlappende Übereinstimmungen mit Pythons „re.findall()' finden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-06 16:40:13648Durchsuche

How Can I Find Overlapping Matches Using Python's `re.findall()`?

Ü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 :

  • (?:...) ist eine nicht erfassende Gruppe, was bedeutet, dass der Inhalt der Gruppe dies nicht ist zurückgegeben.
  • ww stimmt mit zwei aufeinanderfolgenden Wortzeichen überein.
  • (?=...) ist die Lookahead-Behauptung, die sicherstellt, dass die Zeichenfolge ww an der aktuellen Position enthält, diese aber nicht verbraucht.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn