Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall' keine überlappenden Regex-Übereinstimmungen zurück und wie können Lookahead-Assertionen dieses Problem lösen?
Problem:
Wenn Sie re.findall verwenden, um ein reguläres Ausdrucksmuster abzugleichen, Warum werden nicht alle überlappenden Übereinstimmungen abgerufen? Warum stimmt der reguläre Ausdruck r'ww' beispielsweise in der Zeichenfolge „hello“ nur mit „he“ und „ll“ überein, nicht aber mit „el“ und „lo“?
Antwort:
Standardmäßig liefert re.findall keine überlappenden Übereinstimmungen. Um dies zu erreichen, verwenden Sie eine Lookahead-Assertion, eine leistungsstarke Regex-Funktion.
Lösung:
# Using a lookahead assertion matches = re.findall(r'(?=(\w\w))', 'hello') # Output: ['he', 'el', 'll', 'lo']
Das (?=...)-Konstrukt im Regex ist eine Look-Ahead-Behauptung. Es stimmt überein, wenn das angegebene Muster unmittelbar nach der aktuellen Position erscheint, verbraucht aber keine Zeichen aus der Zeichenfolge. In diesem Fall identifiziert es alle Zwei-Zeichen-Sequenzen („ww“) in „Hallo“, ohne irgendwelche Zeichen zu verbrauchen.
Erklärung:
Das obige ist der detaillierte Inhalt vonWarum gibt „re.findall' keine überlappenden Regex-Übereinstimmungen zurück und wie können Lookahead-Assertionen dieses Problem lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!