Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall()' leere Ergebnisse zurück, wenn Gleitkommazahlen in Python abgeglichen werden?

Warum gibt „re.findall()' leere Ergebnisse zurück, wenn Gleitkommazahlen in Python abgeglichen werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-22 07:07:10837Durchsuche

Why Does `re.findall()` Return Empty Results When Matching Floating-Point Numbers in Python?

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:

  • -? entspricht einem optionalen Minuszeichen.
  • d* entspricht optionalen Ziffern.
  • .? entspricht einem optionalen Dezimaltrennzeichen.
  • d entspricht einer oder mehreren Ziffern.

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!

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