2012-08-29 7 views
12

Ich muss Dateinamen aufräumen. So habe ich diesen Code:Regex auf jedes Nicht-Wort-Zeichen, aber die minus

//\W_ is any non-word character (not [^a-zA-Z0-9_]). 
Regex regex = new Regex(@"[\W_]+"); 
return regex.Replace(source, replacement); 

Dies funktioniert gut, aber jetzt will ich nicht, das Minus entfernen (-), also habe ich die Regex dazu:

[\W_^-]+ 

Aber das tut nicht arbeiten. Was habe ich verpasst?

+1

Wenn Sie die Einfügemarke ('^') in einer Zeichenklasse irgendwo anders als am Anfang verwenden, verliert es seine besondere Bedeutung. Und wenn du es richtig benutzt, negiert es alles in der Charakterklasse. Verwenden Sie stattdessen ['[^ a-zA-Z0-9-] +'] (http://rubular.com/r/onJOpL9Fwk). – NullUserException

+0

Danke. Das funktioniert. Ich dachte, man könnte etwas einfaches mit dem \ W machen, aber ich denke nicht. Wenn Sie Ihren Kommentar als Antwort hinzufügen, kann ich ihn genehmigen. – Remy

Antwort

16

Versuchen Sie diesen regulären Ausdruck:

[^\w-]+ 

Edit:

Es scheint, dass der richtige regulärer Ausdruck ist:

[^a-zA-Z0-9-]+ 
+1

Ich glaube, das ist teilweise falsch, weil es nicht mit dem Unterstrich übereinstimmt. – NullUserException

+0

Das \ w entspricht [a-zA-Z0-9_] – Oussama

+1

Richtig, wenn Sie also '\ w' negieren, wird auch der Unterstrich ausgeschlossen. – NullUserException