Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall()' eine leere Liste zurück, wenn „re.search()' eine Übereinstimmung findet?
Die re.findall()-Funktion kann verwirrend sein, wenn sie nicht die erwarteten Ergebnisse zurückgibt passend zu einer Zeichenfolge. Lassen Sie uns die Gründe für sein Verhalten in einem bestimmten Fall untersuchen.
Bedenken Sie die folgende Quellzeichenfolge:
s = r'abc123d, hello 3.1415926, this is my book'
Und das folgende Muster:
pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
Mit re.search bekommen wir das Richtige Ergebnis:
m = re.search(pattern, s) print(m) # <_sre.SRE_Match object; span=(3, 6), match='123'>
Re.findall gibt jedoch eine leere Liste zurück:
L = re.findall(pattern, s) print(L) # []
Es gibt zwei Zu berücksichtigende Schlüsselaspekte:
Um numerische Werte korrekt abzugleichen, verwenden Sie stattdessen das folgende Muster:
pattern = r'-?\d*\.?\d+'
Dieses Muster entspricht:
Mit diesem korrigierten Muster gibt re.findall die erwartete Liste zurück:
['123', '3.1415926']
Das obige ist der detaillierte Inhalt vonWarum gibt „re.findall()' eine leere Liste zurück, wenn „re.search()' eine Übereinstimmung findet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!