Ich habe diese Eingabe String (mit Tabulatoren, Leerzeichen, Zeilenumbrüchen):
%Vor%[Bearbeiten]: Ich hätte die Zeichenfolge für einen besseren Test zur Verfügung gestellt, da stackoverflow alle Sonderzeichen (Tabs, ...) entfernt
%Vor%Und ich möchte diesen Zustand erreichen:
%Vor% %Vor%Irgendwelche Ideen? Kann dies mit Regexes erreicht werden?
replaceAll("\s+", " ")
ist NICHT das, wonach ich suche. Wenn diese Regex genau 1 Newline der vorhandenen beibehalten würde, wäre es perfekt.
Ich habe das versucht, aber das scheint mir suboptimal zu sein ...:
%Vor%In einem einzigen Regex (plus einem kleinen Patch für Tabs):
%Vor%Die Regex sieht entmutigend aus, zerlegt sich aber schön in diese Teile, die zusammen ODER-verknüpft sind:
^\s+
- am Anfang Leerzeichen anpassen; \s+$
- passt am Ende Whitespace an; \s*(\n)\s*
- Passt Leerzeichen an, die einen Zeilenumbruch enthalten, und erfasst diesen Zeilenumbruch; (\s)\s*
- Entspricht dem Leerzeichen und fängt das erste Leerzeichen ein. Das Ergebnis ist eine Übereinstimmung mit zwei Capture-Gruppen, aber nur eine der Gruppen darf nicht gleichzeitig leer sein. Dadurch kann ich die Übereinstimmung durch ""
ersetzen, was bedeutet, dass die beiden Erfassungsgruppen verkettet werden.
Das einzige verbleibende Problem besteht darin, dass ich eine Registerkarte nicht mit einem Leerzeichen ersetzen kann, wenn ich diesen Ansatz benutze. Also repariere ich das mit einem einfachen Zeichenaustausch ohne regulären Ausdruck.
Wenn ich richtig verstehe, möchten Sie einfach eine Folge von Zeilenumbrüchen durch eine neue Zeile ersetzen. Ersetzen Sie also \n\n*
durch \n
(mit entsprechenden Flags). Wenn in den Zeilen viele Leerräume vorhanden sind, entfernen Sie einfach den Leerraum ( ^\s\s*$
mit Mehrzeilenmodus) und ersetzen Sie dann die Zeilenumbrüche.
Bearbeiten: Das einzige Problem hier ist, dass einige Zeilenumbrüche hier und da bleiben können, also müssen Sie vorsichtig sein, zuerst Leerzeichen zu reduzieren und dann das Leerzeilenproblem zu beheben. Sie können es in wahrscheinlich eine einzige Regex weiter reduzieren, aber es ist einfacher, mit diesen drei zu lesen:
%Vor%Tags und Links string java whitespace removing-whitespace