Problem mit RegEx.Replace
-
Hallo Freunde der RexEx!
Ich möchte mit RegEx.Replace() einen Eingabestring auf bestimmte Zeichen filtern. Beim mir scheitert es schon an folgendem simplen Beispiel:
string input = "%$µ°-abcABC091 /#+~"; string output = Regex.Replace(input, "^[a-z]*$", "_");
Der mittlere Teil abc sollte in dem Fall durch "___" ersetzt werden, funktioniert aber nicht und ich weiß nicht warum.
Vorschläge?
MfG F98.
-
string output = Regex.Replace(input, "[a-z]", "_");
-
Ah! Man muss einfach ^ und $ weglassen, dann klappts auch. Aber wieso das denn auf einmal? Sonst muss man das doch auch mit angeben?
-
^
Gibt an, dass der Vergleich am Anfang der Zeichenfolge oder der Zeile erfolgen muss. Weitere Informationen hierzu finden Sie im Abschnitt zur Multiline-Option unter Optionen für reguläre Ausdrücke.Anders ausgedrückt: ^ matcht mit Stringanfang
$
Gibt an, dass der Vergleich am Ende der Zeichenfolge, vor einem \n am Ende der Zeichenfolge oder am Ende der Zeile erfolgen muss. Weitere Informationen hierzu finden Sie im Abschnitt zur Multiline-Option unter Optionen für reguläre Ausdrücke.Anders ausgedrückt: $ matcht mit Stringende
Und jetzt mal überlegen, mit was "^[a-z]*" matcht, wenn der Input-String "%µ°-abcABC091 /#+~" ist... genau: mit garnüscht.
-
Das bedeutet, dass abc... am Anfang und am Ende stehen müßten?
-
F98 schrieb:
Das bedeutet, dass abc... am Anfang und am Ende stehen müßten?
der String ist entweder leer oder besteht nur aus Kleinbuchstaben.
-
Ok, geschnallt.
-
Evtl. noch interessant zum Verständnis, der Unterschied zwischen:
string output = Regex.Replace( input, "[a-z]", "_" );
und
string output = Regex.Replace( input, "[a-z]+", "_" );
bzw. zum besseren Sichten der Matches:
string output = Regex.Replace( input, "(?<test>[a-z])", "{${test}}" );
und
string output = Regex.Replace( input, "(?<test>[a-z]+)", "{${test}}" );
Einfach bissl rumspielen.