„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erfasst man mehrzeilige Textblöcke mit regulären Ausdrücken?

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

Veröffentlicht am 03.11.2024
Durchsuche:663

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 sind:

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

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 „einige variierende TEXT“ in Gruppe 1.
  • \n stimmt mit einem Zeilenumbruchzeichen überein.
  • ((?:\n. ) ) erfasst alle nachfolgenden Zeilen mit Großbuchstaben in Gruppe 2. Das nicht erfassende Gruppenkonstrukt ?: verhindert, dass diese Zeilen erfasst werden werden als einzelne Gruppen erfasst.
  • Der Wiederholungsoperator stellt sicher, dass mindestens eine Zeile Großbuchstabentext vorhanden ist.

Verwendung:

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

import re

pattern = re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)

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

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3