Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt „re.findall' eine leere Liste zurück, während „re.search' in Python 3.4.3 mit demselben Muster und derselben Zeichenfolge korrekt funktioniert?

Warum gibt „re.findall' eine leere Liste zurück, während „re.search' in Python 3.4.3 mit demselben Muster und derselben Zeichenfolge korrekt funktioniert?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 20:57:10220Durchsuche

Why Does `re.findall` Return an Empty List While `re.search` Works Correctly with the Same Pattern and String in Python 3.4.3?

re.findall verhält sich anomal

Dilemma:

In einem Python-Skript mit Python 3.4 .3, die Methode re.search liefert das erwartete Ergebnis, wenn sie auf a angewendet wird bestimmte Quellzeichenfolge mithilfe eines angegebenen Musters. re.findall gibt jedoch aus unerklärlichen Gründen eine leere Liste für dasselbe Muster und dieselbe Quellzeichenfolge zurück.

Erkundung:

Seltsamerweise ist das Die Methode re.findall verhält sich unerwartet, obwohl sie scheinbar die Anforderungen zum Extrahieren von Übereinstimmungen aus einer Zeichenfolge basierend auf a erfüllt Muster.

Lösung:

Bei sorgfältiger Untersuchung wird deutlich, dass zwei Faktoren zu diesem eigenartigen Verhalten beitragen:

  • Musterzusammensetzung:
    Das bereitgestellte Muster enthält einen umstrittenen Ausdruck, r'.', Dies zielt darauf ab, ein Escape-Zeichen () zu finden, gefolgt von einem beliebigen Zeichen, das kein Zeilenumbruch ist. Im Kontext eines r''-String-Literals versucht dieser Ausdruck jedoch, mit einem Literal übereinzustimmen, was zu einem falschen Verhalten führt.
  • findall-Verhalten:
    Das re. Die findall-Methode erwartet, dass das Muster einfangende Gruppen enthält. Wenn keine Erfassungsgruppen vorhanden sind, werden leere Zeichenfolgen zurückgegeben. Dem ursprünglichen Muster fehlen Erfassungsgruppen, sodass die gewünschten Übereinstimmungen nicht erfasst werden können.

Korrigiertes Muster:

Um dieses Problem zu beheben und Übereinstimmungen erfolgreich zu extrahieren, wurde das Das folgende korrigierte Muster sollte sein beschäftigt:

-?\d*\.?\d+

Erläuterung:

  • -?: Optionales Minuszeichen
  • d *:Optionale Ziffern
  • .?: Optionales Dezimaltrennzeichen
  • d : Eine oder mehrere Ziffern

Demonstration:

Unter Verwendung des modifizierten Musters wird das Die Methode re.findall ruft jetzt genau die erwartete Liste von ab Übereinstimmungen:

['123', '3.1415926']

Das obige ist der detaillierte Inhalt vonWarum gibt „re.findall' eine leere Liste zurück, während „re.search' in Python 3.4.3 mit demselben Muster und derselben Zeichenfolge korrekt funktioniert?. 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