| 

.NET C# Java Javascript Exception

4
Ich habe zwei Regex'es:

Regex spaceOnNewLineRegex = @"\n +".AsRegex();
Regex spaceafterLineRegex = @" +\n".AsRegex();

Meine AsRegex Methode verwendet immer das IgnorePatternWhitespace-Flag so dass alle Leerzeichen in meiner Regex ignoriert werden. Wie kann ich, ohne das Flag zu entfernen (was ich gern behalten möchte) trotzdem Leerezeichen matchen? Ich weiß, wie ich in diesem konkreten fall einen Workaround machen könnte, aber ich möchte es für die Zukunft lernen.
News:
05.12.2010
landolf 103 1 1 5
2 Antworten
4
IgnorePatternWhitespace-Option:
Specifies that un-escaped white space is excluded from the pattern and enables comments following a number sign '#'. Note that white space is never eliminated from within a character class. For a list of escaped white-space characters, see the Escapes section.
http://okapi.sourceforge.net/Release/Shared/Help/regex.htm#Options


Folglich musst du gewollte Leerzeichen mit einem "\" escapen oder "\s" verwenden.

//alle Zeilen mit 2 aufeinanderfolgenden Leerzeichen
Regex demo1 = @"\ \ ".AsRegex();

Regex spaceOnNewLineRegex = @"\n\ +".AsRegex();
Regex spaceafterLineRegex = @"\ +\n".AsRegex();


sollte das nicht funktionieren nimm "\s":

//alle Zeilen mit 2 aufeinanderfolgenden Leerzeichen
Regex demo1 = @"\s\s".AsRegex();

Regex spaceOnNewLineRegex = @"\n\s+".AsRegex();
Regex spaceafterLineRegex = @"\s+\n".AsRegex();
06.12.2010
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Wäre ich nie drauf gekommen ;-)
landolf 07.12.2010
So, nunoch 1 positive Bewertung und ich bin auf Platz 2 aller Member :D.

Zum Thema: schau doch mal auf Wikipedia vorbei: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Weiter unten kommen einige Auflistungen für Zeichenklasse / -Gruppe, Escape-Sequenzen und ein paar Erklärungen zum Thema Lockahead und co.
Floyd 07.12.2010
Bei der Bewertung kann ich helfen ;-)
landolf 08.12.2010
sehr freundlich .. *Flasche Champus aufmachend und jedem der das hier liest ein Glas anbietend*
Floyd 08.12.2010
Ist schon lange her, aber zur Doku ;)

\s ist kein Leerzeichen sondern steht für [ \t\v\f\r\n] bzw. allen Unicode-Zeichen, die ein Whitespace darstellen.
Will man nur Leerzeichen (ASCII 32) auswählen, muss "\ " oder "[ ]" ausreichen.
Vor allem wegen den enthaltenen \r und \n stellt \s nicht immer das gewollte verhalten dar - z.B. bei der Auswahl der Leerzeichen am Zeilenende.
WolfgangKluge 12.07.2011
2
mit dem findest du alle Stellen wo mind. 4 Leerstellen zusammen hängen:
Regex re = Regex(@"([\s])*\1{4,}");

Grüßle Blue
06.12.2010
Blue 321 1 5
Auch hier. Wenn nur Leerzeichen hintereinander gesucht werden, dann ist wohl

[ ]{4,}

einfacher zu schreiben (und verwendet keine Backreference, was zumindest potentiell schneller ist).
WolfgangKluge 12.07.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH