Wie erfasst man mehrzeilige Textblöcke mit regulären Ausdrücken?

Patricia Arquette
Freigeben: 2024-10-25 06:05:02
Original
786 Leute haben es durchsucht

How to Capture Multiline Text Blocks with Regular Expressions?

Regulärer Ausdruck zum Abgleichen mehrzeiliger Textblöcke

Der Abgleich von Text, der sich über mehrere Zeilen erstreckt, kann bei der Erstellung regulärer Ausdrücke eine Herausforderung darstellen. Betrachten Sie den folgenden Beispieltext:

some Varying TEXT

DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
[more of the above, ending with a newline]
[yep, there is a variable number of lines here]

(repeat the above a few hundred times)
Nach dem Login kopieren

Das Ziel besteht darin, zwei Komponenten zu erfassen: den Teil „irgendein variierender TEXT“ und alle nachfolgenden Zeilen mit Großbuchstaben, mit Ausnahme der Leerzeile.

Falsche Ansätze:

Einige falsche Ansätze zur Lösung dieses Problems umfassen:

  • Verwendung von ^- und $-Ankern zum Anpassen von Zeilenvorschüben. Im Mehrzeilenmodus passt ^ auf Positionen nach Zeilenumbrüchen und $ auf Positionen vor Zeilenumbrüchen.
  • Verwendung des Modifikators DOTALL, um alles abzugleichen, was unnötig ist, da der Punkt (.) auf alles außer Zeilenumbrüchen zutrifft.

Lösung:

Der folgende reguläre Ausdruck erfasst die gewünschten Komponenten korrekt:

^(.+)\n((?:\n.+)+)
Nach dem Login kopieren

Hier ist eine Aufschlüsselung seiner Komponenten:

  • ^ stimmt mit dem Anfang der Zeile überein.
  • (. ) erfasst den Teil „irgendein variierender TEXT“ in Gruppe 1.
  • n entspricht einem Zeilenumbruchzeichen.
  • ( (?:n. ) ) erfasst alle nachfolgenden Zeilen mit Großbuchstaben in Gruppe 2. Das nicht erfassende Gruppenkonstrukt ?: verhindert, dass diese Zeilen als einzelne Gruppen erfasst werden.
  • Der Wiederholungsoperator stellt sicher, dass mindestens eine Zeile mit Großbuchstaben ist vorhanden.

Verwendung:

Um diesen regulären Ausdruck in Python zu verwenden, können Sie den folgenden Code verwenden:

<code class="python">import re

pattern = re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>
Nach dem Login kopieren

Sie können dann die Methode match() verwenden, um Übereinstimmungen in einer Zeichenfolge zu finden:

<code class="python">match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erfasst man mehrzeilige Textblöcke mit regulären Ausdrücken?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!