2016-12-07 3 views
0

Я пытаюсь удалить специальные символы (за некоторыми исключениями) из строки с помощью this MSDN example. Я использую рамки NET v4.0 и мой код выглядит следующим образом:Замена специальных символов с регулярным выражением - C#

myString = Regex.Replace(myString, @"[^\w [email protected]$*-_.]", "", 
           RegexOptions.None); 

Однако, во время тестирования, я заметил, что на верхней части символов, перечисленных выше, не заменяя другим, как [] \ или /. Я думал, что это поймает регулярное выражение, и это касается меня, что могут быть и другие, которые тоже не пойманы.

Любой совет, чтобы выяснить причину и как ее решить, будет очень признателен. Спасибо огромное!

+1

Вы пытаетесь разрешить '!', '$' И '*' в дополнение к слову, период, hypen и '@' указанной исходной MSDN пример? Я вижу, что вы изменили регулярное выражение из этого примера. –

+0

Как сказал @JohnWeldon, ваш пример отличается от примера веб-сайта, который вы опубликовали. Какие исключения вы хотите? Также - этот сайт полезен для тестирования наших выражений Regex - http://www.regexpal.com/ – Asnivor

+0

Привет, Джон. Да, я допускаю символы «! @ $ * -_». (без кавычек), плюс пустое пространство. Проблема в том, что это не только позволяет, но и еще кое-что, что я нашел во время тестирования (например, «[] \ /», опять же, без кавычек). Я бы хотел, чтобы он разрешал только персонажи, которые я перечисляю, и другие. – Irina

ответ

1

Эта версия позволяет три дополнительные символы, которые Вы, кажется, пытается добавить:

Regex.Replace(
    @"a!s$d*f[a\s/df]a_s.d-f", 
    @"[^\w\.!$*@-]", 
    "", 
    RegexOptions.None) 

Урожайность

a!s$d*fasdfa_s.d-f 

Проблема с модификацией является то, что она позволяет все символы между * и _

Вы можете переписать свой пример как:

myString = Regex.Replace(myString, @"[^\w [email protected]$*\-_.]", "", 
          RegexOptions.None); 

Обратите внимание на экранирование дефиса

+0

Это была проблема. Спасибо огромное! – Irina

Смежные вопросы