Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erfasst man mehrzeilige Textblöcke mit regulären Ausdrücken?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 06:05:02777Durchsuche

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)

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.+)+)

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>

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>

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!

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