Regex для удаления знаков препинания, но игнорирования косой черты?

Поэтому я создаю небольшой синтаксический анализатор на C#, где пользователь может вводить имена. Теперь эти имена могут быть в трех форматах:

"name" OR "name / name" OR "name-name"

Пользователь может написать входную строку с другой пунктуацией, такой как name? или name.. Чтобы удалить их, я получил регулярное выражение, которое выглядит так:

   var expression = "name / name";
   var regexPunctuation = new Regex(@"[^-\w\s]");
   expression = regexPunctuation.Replace(expression, string.Empty);

Мое регулярное выражение работает для одиночных имен и имен с - между ними, но не для имен с косой чертой. Если пользователь вводит name / name, результатом будет просто name name. Как я могу изменить свое регулярное выражение, чтобы оно игнорировало косую черту, чтобы результат был name / name? Обратите внимание на дополнительные пробелы между name / name.


person leffe10    schedule 14.06.2017    source источник
comment
Вы пытались добавить косую черту к шаблону игнорирования? new Regex(@"[^-\w\s/]");   -  person DolceVita    schedule 14.06.2017
comment
Сначала разделите строку и обработайте каждую из двух подстрок, а затем соединитесь обратно. Если / нет, просто обработайте единственную часть name.   -  person Wiktor Stribiżew    schedule 14.06.2017
comment
Какое отношение лишние пробелы имеют к проблеме? Вы говорите принять к сведению, но, насколько я понимаю, они не имеют никакого отношения к проблеме. Если они имеют отношение, пожалуйста, объясните подробно.   -  person C Perkins    schedule 14.06.2017


Ответы (3)


Это должно быть так:

new Regex(@"[^-/\w\s]")
person fdafadf    schedule 14.06.2017
comment
Пробовал, разницы нет. - person leffe10; 14.06.2017
comment
imgur.com/C468GZ6 Может у вас что-то не так в другой части программы? - person fdafadf; 14.06.2017
comment
Это работает и для меня, используя фрагмент кода из вопроса, но с дополнительной косой чертой в шаблоне. - person C Perkins; 14.06.2017

Попробуйте экранировать / следующим образом: new Regex(@"[^-\/\w\s]")

person garyh    schedule 14.06.2017

person    schedule
comment
Нет необходимости экранировать косую черту. / не является метасимволом регулярного выражения. - person C Perkins; 14.06.2017