Mehrzeilige Blöcke mit regulären Ausdrücken abgleichen
Beim Abgleich mit Text, der sich über mehrere Zeilen erstreckt, können mit den regulären Ausdrücken von Python Schwierigkeiten auftreten. 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:
Mehrere Versuche wurden erfolglos unternommen:
re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines
Um dieses Problem zu beheben, verwenden Sie den folgenden regulären Ausdruck:
re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)
Denken Sie daran, dass Anker „^“ und „$“ stimmt nicht mit Zeilenumbrüchen überein. Daher folgt im mehrzeiligen Modus „^“ einem Zeilenumbruch und „$“ geht einem Zeilenumbruch voran.
Achten Sie außerdem auf verschiedene Zeilenumbruchformate. Für Text, der Zeilenvorschübe, Wagenrückläufe oder beides enthalten kann, verwenden Sie diesen umfassenderen regulären Ausdruck:
re.compile(r"^(. )(?:\n|\r\n?)((?:(?:\n|\r\n?). ) )", re.MULTILINE)
Der Modifikator DOTALL ist hier unnötig, da der Punkt bereits Zeilenumbrüche ausschließt.
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