Aufgrund Ihrer Kommentare bin ich mir ziemlich sicher, dass das Problem darin besteht, dass Sie Ihre Übereinstimmung auf einzelne Zeilen und nicht auf den gesamten Text anwenden. Ein negatives Lookahead mit der Breite Null (das Sie verwenden, mit (?!\d)
) wird erfolgreich übereinstimmen, wenn das Newline das letzte Zeichen in der Eingabezeichenfolge ist, was der Fall sein wird, wenn Ihr Code zeilenweise funktioniert. Der Lookahead sagt grundsätzlich "Match, wenn nicht gefolgt von einer Ziffer". Das ist immer wahr, wenn in der Eingabezeichenfolge nichts mehr übrig ist.
Sie können die Regex nicht ändern, um dieses Problem zu beheben. Nichts, was Sie in einer einzelnen Zeile überprüfen, kann Ihnen sagen, was der Inhalt der nächsten Zeile sein wird, also müssen Sie den umgebenden Code irgendwie ändern. Ein Ansatz wäre, den gesamten Text zu lesen und zu transformieren, anstatt nur eine Zeile auf einmal. Oder Sie könnten etwas wie the pairwise
recipe from itertools
verwenden, um zwei Zeilen gleichzeitig zu untersuchen, und die zweite Zeile untersuchen, um zu entscheiden, ob Sie die erste Zeile transformieren müssen.
Ich möchte auch darauf hinweisen, dass das Ersetzen durch \1
nicht geeignet ist, da Sie keine einfangende Gruppe haben (die Klammern in Ihrem Muster sind Teil der Null-Breite Lookahead-Syntax, keine Gruppierungssyntax). Sie sollten nur durch eine leere Zeichenfolge ersetzt werden (was tatsächlich ist, was Sie tun, da die Rückreferenz nichts betrifft).
Sie haben in Ihrem Muster keine Erfassungsgruppe definiert. Ersetzen durch leere Zeichenfolge. Siehe ['\ r? \ N (?! \ D)' demo] (https://regex101.com/r/xR2fI1/1). Funktionieren [diese Demo] (https://ideone.com/Iw9r8i) so, wie Sie es erwarten? –
Ich habe versucht, durch eine leere Zeichenfolge zu ersetzen, aber das Ergebnis ist, dass fast jedes \ n aus meinem Dokument entfernt wird. Ich habe diese Demo versucht, es sei denn, ich mache etwas falsch, leider ist das Ergebnis sehr ähnlich – user3194301
Bitte fügen Sie die Zeichenfolge, gegen die Sie testen (als Python-Variable) und das erwartete Ergebnis. Ich habe das Gefühl, als ob deine Absicht nicht das ist, was du in der Frage beschrieben hast. Alle Fragen, die sich auf Zeilenumbrüche beziehen, sind fast immer das Ergebnis von Missverständnissen oder Tippfehlern im Code oder sogar der Frage, ob es CR + LF oder nur LF-Zeilenenden gibt. Manchmal, Codierungsprobleme. Daher wäre ein Code, der nicht funktioniert, sehr hilfreich. –