Ich habe eine Reihe von Textdateien zu analysieren, die möglicherweise keine Sammlung von Headern enthalten, und dann Zeilen von Daten oder Kommentar unterhalb dieser Überschrift. Allen Kopfgruppen wird ein doppelter Zeilenumbruch vorangestellt.Wie kann regulärer Ausdruck eine leere Zeichenfolge zurückgeben
Ich bin auf der Suche nach einem regulären Ausdruck, der eine leere Zeichenfolge zurückgibt, wenn eine Kopfzeile unmittelbar gefolgt von einem doppelten Zeilenumbruch angezeigt wird. Ich muss unterscheiden, ob ein Dokument diesen Header ohne Inhalt hat oder diesen Header überhaupt nicht hat.
Zum Beispiel, hier sind Teile von zwei Dokumente:
Dogs
Spaniel
Beagle
Birds
Parrot
und
Dogs
Amphibians
Frogs
Salamanders
ich einen regulären Ausdruck möchte die Spaniel\nBeagle
in dem ersten Dokument, und eine leere Zeichenfolge für die zweite zurückkehren .
Die nächste, die ich finden konnte, ist (in Python-Syntax) expr = re.compile("Dogs(.+?|)?\n\n, re.DOTALL)
. Dies gibt den richtigen Wert für den ersten zurück, aber im zweiten Fall gibt es zurück. Das zweite Fragezeichen und die Pipe tun nicht, was ich mir erhofft hatte.
Ich handle dies durch Programm Logik jetzt, Suche nach Dogs\n\n
und nur Inhalte, wenn diese Regex nicht gefunden wird, aber es ist unbefriedigend, weil nichts das Gefühl von einem einzigen regulären Ausdruck die Arbeit macht.
Also: Gibt es eine Regex, die dem zweiten Dokument entspricht und ""
zurückgibt?
Verwendung: 'expr = re.compile (. R'Dogs * \ n \ n ')' – anubhava
Guter Gott, war ich es jemals Grübeln. Vielen Dank! – prooffreader
"Nichts geht über das Gefühl, dass ein einzelner regulärer Ausdruck die Aufgabe erfüllt.": Es ist eine naive Überzeugung. –