Hallo,
in einem String sollen alle Leerzeichen durch ersetzt werden, aber nur, wenn mindestens zwei Leerzeichen aufeinander folgen.
Wie macht man das mit einem Regex?
Ich stehe ziemlich auf dem Schlauch ... es scheitert schon daran, dass ich ehrlich gesagt keinen Plan habe, wie ich auf ein Leerzeichen prüfe ... für alles mögliche gibt's ja diese Escapesequenzen, auch für Whitespace im Allgemeinen, aber nicht explizit für eine Leerstelle.
Zweites Problem - wie gehe ich mit der flexiblen Anzahl an Leerstellen um?
Viele Grüße,
Golo
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Hallo Golo,
jedes Zeichen ohne Sonderbedeutung steht in einem Pattern für sich selbst, so auch das Leerzeichen.
Zum zweiten Problem: Verwende einen MatchEvaltuator.
Oder ersetze einfach jeweils zwei Leerzeichen mit " ". Das geht sogar mit String.Replace. Das kostet weniger Platz und hat den Vorteil, dass die Leerzeichen weiterhin umgebrochen werden können, wie ein einzelnes Leerzeichen ja auch.
herbivore
Ich hab immer sowas gemacht:
input = input.Replace(" ", " ", input);
input = input.Replace(" ", " ", input);
Durch die zweimalige Ausführung sollten auch die Stellen mit genau 3 Leerzeichen erfasst werden - hoffe ich.
Mit einem Regex könnte es vielleicht so gehen:
input = Regex.Replace(input, " (?= )", " ");
Der ersetzt jedes Leerzeichen, auf das ein Leerzeichen (das jedoch nicht übersprungen oder ersetzt wird <- Look-ahead Assertion) folgt, durch " ".
Im übrigen würde ich immer zuerst und dann das Leerzeichen setzen, da das sonst am Anfang der Zeile nach einem Zeilenumbruch einen kleinen "unerklärlichen" Abstand verursacht. Weitere Auswirkungen sind mir nicht bekannt.
Original von LonelyPixel
input = input.Replace(" ", " ", input); input = input.Replace(" ", " ", input);
IMHO wäre (wenn mehr als 3 Leerzeichen vorhanden sind) dies besser:
while (myString.Contains(" "))
{
myString = myString.Replace(" ", " ");
}
mfg
webstarg
Hey 🙂
mal kurz ne Frage: warum unterscheided Golo zwischen Whitespaces und Leerzeichen? oder hab ich das falsch verstanden...
Mal nur regex betrachtet, wäre da nicht \s{2,} das gesuchte Muster?
Hallo creave,
in \s sind noch andere Zeichen enthalten: \f, \n, \r, \t und \v
Wenn man nur Leerzeichen ersetzen will, ist es also nicht das richtige.
Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)
Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…
Blog: www.fabiandeitelhoff.de
In pcre Notation:
s/ {2,}/ /g
oder
s/ +/ /g
Sollte es tun..
Edit: Ups, falsch gelesen. Danke, herbivore
Pound for pound, plutonium is about as toxic as caffeine when eaten.
Hallo DarKlajid,
nein, das tut es nicht. Es sollen ja nachher genauso viele Leerzeichen angezeigt werden, wie in dem Ausgangstext enthalten sind. Du ersetzt aber Ketten von Leerzeichen durch genau eins.
herbivore