2012-08-29 10 views
12

Potrzebuję oczyścić nazwy plików. Więc mam ten kod:Regex, aby dopasować dowolny znak nie słowny, ale minus

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

Działa to dobrze, ale teraz nie chcę, aby usunąć minus (-), więc zmieniłem regex do tego:

[\W_^-]+ 

Ale to robi nie działa. Co mnie ominęło?

+1

W przypadku korzystania z daszka ('^') w klasie znaków w dowolnym miejscu innym niż na początku, to traci swe specjalne znaczenie. A kiedy użyjesz go poprawnie, neguje wszystko w klasie postaci. Zamiast tego użyj ['[^ a-zA-Z0-9-] +'] (http://rubular.com/r/onJOpL9Fwk). – NullUserException

+0

Dzięki. To działa. Pomyślałem, że można zrobić coś prostego z \ W, ale chyba nie. Jeśli dodasz komentarz jako odpowiedź, mogę go zatwierdzić. – Remy

Odpowiedz

16

Spróbuj użyć tego wyrażenia regularnego:

[^\w-]+ 

Edit:

Wydaje się, że prawo jest wyrażenie regularne:

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

Uważam, że jest to częściowo niepoprawne, ponieważ nie pasuje do podkreślenia. – NullUserException

+0

\ w jest równe [a-zA-Z0-9_] – Oussama

+1

Prawidłowo, więc po zanegowaniu '\ w' również wykluczasz podkreślenie. – NullUserException

Powiązane problemy