Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall' beim Abgleichen von Zahlen in Python eine leere Liste zurück?
re.findall verhält sich inkonsistent
Beim Versuch, re.findall zum Abgleichen numerischer Werte in einer Zeichenfolge zu verwenden, ist einigen Benutzern ein unerwartetes Verhalten aufgefallen . Während re.search Übereinstimmungen genau abruft, gibt re.findall eine leere Liste zurück. Diese offensichtliche Ungleichheit kann auf die folgenden Faktoren zurückgeführt werden:
Erfassen von Gruppen und re.findall
Ein wichtiger Punkt, den Sie beachten sollten, ist, dass re.findall erfassten Text erfasst, wenn der Regex-Muster enthält Erfassungsgruppen. Wie in der Referenz definiert, gibt re.findall eine Liste von Gruppen zurück, wenn ein Muster erfassende Gruppen enthält, möglicherweise in Form von Tupeln für Muster mit mehreren Gruppen. Insbesondere werden sogar leere Übereinstimmungen in die Ausgabe einbezogen, es sei denn, sie gehen unmittelbar einer anderen Übereinstimmung voraus.
Nicht erfassende Gruppen und wörtliches Escaping
Im bereitgestellten Beispiel ist das spezifische Das Problem ergibt sich aus der Verwendung von \ innerhalb von r''-String-Literalen. Dieses Konstrukt versucht, eine Übereinstimmung mit einem Literal zu finden, und nicht mit der beabsichtigten Bedeutung der Übereinstimmung mit einem einzelnen Zeichen (außer einem Zeilenumbruch). Um numerische Werte korrekt abzugleichen, sollte das Muster wie folgt geändert werden:
-?\d*\.?\d+
Dieses Muster umfasst die folgenden Erfassungsgruppen:
Demonstration
Hier ist eine IDEONE-Demonstration des überarbeiteten Musters:
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L)
Dieses Muster ruft die erwartete Liste numerischer Übereinstimmungen korrekt ab: ['123', '3.1415926'].
Durch die Berücksichtigung der Art der Erfassung von Gruppen und der angemessenen Verwendung von Literal-Escapen können Entwickler sicherstellen, dass re.findall in ihren Skripten wie vorgesehen funktioniert.
Das obige ist der detaillierte Inhalt vonWarum gibt „re.findall' beim Abgleichen von Zahlen in Python eine leere Liste zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!