Regex zum Ersetzen von Leerzeichen durch Komma-Leerzeichen, außer am Ende der Zeile

8

Ich versuche, den Inhalt dieser Eingabedatei zu verdecken:

%Vor%

dazu:

%Vor%

, d. h., ersetzen Sie ein Leerzeichen durch Komma und Leerzeichen (ausgenommen Newline)

Dafür habe ich es versucht:

%Vor%

aber es gibt:

%Vor%

Wie kann ich das zusätzliche Komma stoppen, das nach ":" erscheint (ich will ":" und ein einzelnes Leerzeichen), ohne eine weitere Regex zu schreiben?

Danke

    
J.Carter 02.11.2016, 06:28
quelle

3 Antworten

10

Versuchen Sie es mit regex negativem Lookbehind. Es sieht grundsätzlich so aus, wenn das Zeichen vor dem Leerzeichen ein Doppelpunkt ist ( : ), dann stimmt es nicht mit diesem Leerzeichen überein.

%Vor%     
Niyoko Yuliawan 02.11.2016, 06:35
quelle
4

Sie können mit der Wortgrenze spielen, um den Raum zu entfernen, der auf den Doppelpunkt folgt: s/\b\h+/, /g

Es kann mit Perl gemacht werden:

%Vor%

aber auch mit sed:

%Vor%

Andere Vorgehensweise, die das Feldtrennzeichen verwendet:

%Vor%

oder machen Sie dasselbe mit awk:

%Vor%     
Casimir et Hippolyte 02.11.2016 08:48
quelle
2

Sie waren nah dran. Das sollte den Trick machen:

%Vor%

Die Sache ist, ich versuche, die Teile zu sehen, die ein Komma nach ihnen bekommen werden, die auf das Muster von "Ziffern, dann ein Strich, mehr Ziffern, dann ein Leerzeichen, das kein Zeilenumbruch ist" zutreffen. Das Lustige daran ist, dass ich "whitespace, das ist kein Zeilenumbruch" -Teil als [^\S\n]+ , was "nicht ein Nicht-Whitespace oder eine Newline" bedeutet (weil \S alles ist, was nicht \s ist und wir wollen schließt auch den Zeilenumbruch aus). Wenn Sie auf jeden Fall einen abschließenden Leerraum haben, können Sie ihn mit s/\s+$// vor dem obigen Regex trimmen, vergessen Sie aber nicht, das Newline-Zeichen danach wieder hinzuzufügen.

    
yonyon100 02.11.2016 06:34
quelle

Tags und Links