re.findall verhält sich unvorhersehbar
Mit der ursprünglichen Zeichenfolge und dem Originalmuster wie unten definiert:
s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
re. Die Suche findet genau eine Übereinstimmung, während re.findall eine leere Liste liefert. Dieses Verhalten, das der erwarteten Ausgabe von ['123', '3.1415926'] widerspricht, wirft die Frage auf, warum re.findall dieses Ergebnis nicht liefert.
Das Problem verstehen
Hier spielen zwei wichtige Überlegungen eine Rolle:
Regex-Änderung
Um dieses Problem zu beheben, können wir das Muster ändern, um redundante Erfassungsgruppen zu entfernen und Zahlen korrekt abzugleichen:
pattern = r'-?\d*\.?\d+'
Dieses Muster passt zu:
Ergebnisse
Dies wurde geändert Muster erzeugt re.findall die erwartete Ausgabe:
import re L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
Das obige ist der detaillierte Inhalt vonWarum kann „re.findall' keine Zahlen in einer Zeichenfolge finden, wenn „re.search' erfolgreich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!