Ich habe eine lange Zeichenfolge, die ein Absatz ist, aber nach Perioden gibt es keinen Leerraum. Zum Beispiel:
%Vor%Ich versuche re, um dieses Problem zu lösen, aber die Ausgabe ist nicht das, was ich erwartet habe.
Das habe ich gemacht:
%Vor% Ich passe das erste Zeichen jedes Satzes an, und ich möchte ein weißes Leerzeichen davor setzen. Mein Übereinstimmungsmuster ist (?<=\.).
, das (angeblich) nach einem Zeichen sucht, das nach einem Punkt angezeigt wird. Ich habe aus anderen stackoverflow-Fragen gelernt, dass \ 1 mit dem letzten übereinstimmenden Muster übereinstimmt, also schrieb ich mein Ersetzungsmuster als , ein Leerzeichen, gefolgt von der zuvor übereinstimmenden Zeichenfolge.
Hier ist die Ausgabe:
%Vor% Anstatt ein beliebiges Zeichen vor einem Punkt zu finden und davor ein Leerzeichen einzufügen, ersetzt re.sub
das übereinstimmende Zeichen durch \x01
. Warum? Wie füge ich ein Zeichen vor einer übereinstimmenden Zeichenfolge hinzu?
Der (?<=a)b
ist ein positiver Lookbehind . Es entspricht b
nach a
. Der a
wird nicht erfasst. In deinem Ausdruck bin ich mir nicht sicher, was der Wert von in diesem Fall darstellt, aber es ist nicht das, was in
(?<=...)
enthalten ist.
Ihr derzeitiger Ansatz hat noch einen weiteren Nachteil: Er würde nach einem .
ein Leerzeichen einfügen, selbst wenn eines bereits vorhanden ist.
Um fehlenden Platz nach .
hinzuzufügen, empfehle ich eine andere Strategie:
Ersetzen Sie .
-followed-by-non-space-non-dot durch .
und ein Leerzeichen:
Eine leicht modifizierte Version von regex
funktioniert auch:
Sie können vielleicht den folgenden Regex (mit einem positiven Look-behind und <) verwenden a href="http://www.regular-expressions.info/lookaround.html#lookahead"> negative Vorausschau Behauptung) :
%Vor%python
%Vor%Siehe Demo
Ich denke, das ist es, was Sie tun wollen. Sie können eine Funktion übergeben, um die Ersetzung durchzuführen.
%Vor%Drucke:
%Vor%Wie @ Seanny123 darauf hingewiesen hat, fügt dies ein Leerzeichen hinzu, selbst wenn nach dem Punkt bereits ein Leerzeichen vorhanden war.
Die einfachste Regex-Substitution, die Sie verwenden können, ist diese:
%Vor% Er passt einfach zu jeder Periode und verwendet den Lookahead, (?=\w)
, um sicherzustellen, dass neben dem Punkt ein Wortzeichen und nicht bereits ein Leerzeichen steht, und ersetzt ihn durch .