Laden...

Regex für Leerzeichen?

Erstellt von Golo Roden vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.887 Views
Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 16 Jahren
Regex für Leerzeichen?

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

www.goloroden.de
www.des-eisbaeren-blog.de

49.485 Beiträge seit 2005
vor 16 Jahren

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

L
333 Beiträge seit 2007
vor 16 Jahren

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 "&nbsp;".

Im übrigen würde ich immer zuerst &nbsp; und dann das Leerzeichen setzen, da das &nbsp; sonst am Anfang der Zeile nach einem Zeilenumbruch einen kleinen "unerklärlichen" Abstand verursacht. Weitere Auswirkungen sind mir nicht bekannt.

W
558 Beiträge seit 2006
vor 16 Jahren

Original von LonelyPixel

input = input.Replace("  ", "&nbsp; ", input);  
input = input.Replace("  ", "&nbsp; ", input);  

IMHO wäre (wenn mehr als 3 Leerzeichen vorhanden sind) dies besser:


while (myString.Contains("  "))
{
myString = myString.Replace("  ", "&nbsp; ");
}

mfg
webstarg

C
28 Beiträge seit 2006
vor 16 Jahren

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?

1.985 Beiträge seit 2004
vor 16 Jahren

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

D
386 Beiträge seit 2007
vor 16 Jahren

In pcre Notation:

s/ {2,}/&nbsp;/g

oder

s/ +/&nbsp;/g

Sollte es tun..

Edit: Ups, falsch gelesen. Danke, herbivore

Pound for pound, plutonium is about as toxic as caffeine when eaten.

49.485 Beiträge seit 2005
vor 16 Jahren

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