Heim >Backend-Entwicklung >Python-Tutorial >Warum kann „re.findall' keine Zahlen in einer Zeichenfolge finden, wenn „re.search' erfolgreich ist?

Warum kann „re.findall' keine Zahlen in einer Zeichenfolge finden, wenn „re.search' erfolgreich ist?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-29 13:21:11846Durchsuche

Why Does `re.findall` Fail to Find Numbers in a String When `re.search` Succeeds?

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:

  1. Erfassung Gruppen: re.findall extrahiert und gibt nur erfassten Text zurück, wenn das Regex-Muster erfassende Gruppen enthält.
  2. Literale Backslash-Übereinstimmung: Das \ innerhalb des Musters versucht eher, mit einem Literal übereinzustimmen als beabsichtigt. Zeichen.

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:

  • -?d*: Optionales Minuszeichen und Null oder mehr Ziffern
  • .?: Optionales Dezimaltrennzeichen
  • d: Eine oder mehrere Ziffern

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:AktualisierenNächster Artikel:Aktualisieren