Heim  >  Artikel  >  Backend-Entwicklung  >  Wie extrahiere ich mit Regex die kürzesten Übereinstimmungen zwischen zwei Zeichenfolgen in Python?

Wie extrahiere ich mit Regex die kürzesten Übereinstimmungen zwischen zwei Zeichenfolgen in Python?

DDD
DDDOriginal
2024-10-24 02:56:29356Durchsuche

How to Extract Shortest Matches Between Two Strings in Python with Regex?

Kürzeste Übereinstimmungen zwischen zwei Zeichenfolgen extrahieren

Beim Umgang mit großen Protokolldateien kann das Extrahieren spezifischer Daten zwischen zwei Zeichenfolgen eine Herausforderung sein. Die Aufgabe wird komplizierter, wenn die Start- und Endzeichenfolgen in der Datei mehrmals vorkommen und die gewünschte Ausgabe kürzeste Übereinstimmungen beinhaltet.

Regex-Lösung

Um dieses Problem zu lösen kann ein regulärer Ausdrucksansatz verwendet werden. Der ideale reguläre Ausdruck würde den Text zwischen den Start- und Endzeichenfolgen erfassen und die kürzesten Übereinstimmungen priorisieren.

Der bereitgestellte reguläre Ausdruck (start((?!start).)*?end) erfüllt diese Kriterien:

  • start stimmt genau mit der Startzeichenfolge überein.
  • ((?!start).)*? Entspricht jedem Zeichen außer start wiederholt unter Verwendung eines Lazy-Quantifizierers *? um kürzeste Übereinstimmungen zu priorisieren.
  • end stimmt genau mit der Endzeichenfolge überein.

Implementierung mit Python

In Python bietet das re-Modul die notwendige Funktionen, um diesen regulären Ausdruck anzuwenden. Der folgende Code zeigt, wie man mit re.findall die kürzesten Übereinstimmungen extrahiert:

<code class="python">import re

text = "start spam\nstart rubbish\nstart wait for it...\n    profit!\nhere end\nstart garbage\nstart second match\nwin. end"

matches = re.findall('(start((?!start).)*?end)', text, re.S)

for match in matches:
    print(match)</code>

Ausgabe:

start wait for it...
    profit!
here end
start second match
win. end

Zusätzliche Überlegungen für große Dateien

Bei außergewöhnlich großen Dateien (z. B. 2 GB) ist Effizienz entscheidend. Die folgende Optimierung kann angewendet werden:

  • Verwenden Sie einen pufferbasierten Ansatz, um das Einlesen der gesamten Datei in den Speicher zu vermeiden.
  • Verwenden Sie Flags der Engine für reguläre Ausdrücke wie re.MULTILINE, um mehrere Dateien zu verarbeiten. Line-Eingänge.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich mit Regex die kürzesten Übereinstimmungen zwischen zwei Zeichenfolgen in Python?. 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