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
Freigeben: 2024-12-29 13:21:11
Original
833 Leute haben es durchsucht

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]+'
Nach dem Login kopieren

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+'
Nach dem Login kopieren

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']
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage