Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall()' leere Ergebnisse zurück, wenn Gleitkommazahlen in Python abgeglichen werden?
Fehlverhalten von re.findall: Unerwünschte leere Ergebnisse
Im gegebenen Szenario hat re.search() den beabsichtigten numerischen Wert erfolgreich extrahiert. 123" aus der Quellzeichenfolge erzeugte re.findall() unerwartet ein leeres Ergebnis.
Nach der Untersuchung war der Schuldige identifiziert als r'\.' Teil des Regex-Musters. Innerhalb von Rohzeichenfolgen (mit dem Präfix r) wird \ wörtlich behandelt und entspricht einem Backslash-Zeichen, gefolgt von einem beliebigen Zeichen außer einem Zeilenumbruch. Dies ist jedoch nicht das beabsichtigte Verhalten für die Erfassung von Gleitkommazahlen.
Um das Problem zu beheben, folgt das korrigierte Muster -?d*.?d diesen Prinzipien:
Mit diesem überarbeiteten Muster identifiziert re.findall() nun korrekt die numerischen Werte in der Quellzeichenfolge:
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
Denken Sie daran, dass re.findall() Übereinstimmungswerte ohne einfangende Gruppen zurückgeben kann, wenn das Muster frei von einfangenden Gruppen oder Gruppen sein muss nicht erfassende Gruppen (z. B. (?:)), es sei denn, das Muster enthält Rückverweise.
Das obige ist der detaillierte Inhalt vonWarum gibt „re.findall()' leere Ergebnisse zurück, wenn Gleitkommazahlen in Python abgeglichen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!