регулярное выражение, сопоставление символов только с пробелом

#regex

#регулярное выражение

Вопрос:

У меня есть следующее регулярное выражение на c#:

 return Regex.Replace(str, "[^a-zA-Z0-9_.-] ", "", RegexOptions.Compiled);
  

Допустимыми символами являются a-z, 0-0, _,., -.

Я хочу сопоставлять только — если в нем есть пробел слева И / ИЛИ справа.

Для примера:
тротуар -дороги = не должны ничего заменять (только допустимый случай) (тротуар -дороги тоже в порядке)
тротуар — дороги = должны быть удалены
тротуар- дороги = должны быть удалены
тротуар — дороги = должны быть удалены

Комментарии:

1. Допустимыми символами являются: a-z, 0-0, _,., -.? Кажется, это недопустимые символы.. У этих тротуаров -дорог есть пробел слева. И в нем нет пробела справа so И / ИЛИ = true . Но вы говорите, что это допустимо. Я в замешательстве.

2. Когда я прохожу тротуары -@$$ @ #дороги к вышеупомянутому регулярному выражению, @$$ @ # удаляется.

3. Это не делает пример более понятным..

Ответ №1:

Попробуйте это:

 return Regex.Replace(str, "(  )-(  )", "\1\2", RegexOptions.Compiled);
  

Это должно удалить все тире, окруженные пробелами, и сохранить пробелы нетронутыми.

Комментарии:

1. Я должен упомянуть, что он должен сохранить исходное регулярное выражение «[^ a-zA-Z0-9_.] » и просто добавить изменения, необходимые для приведенного выше требования. Я попытался подключить «[^a-zA-Z0-9_.( )-( )] » и он выдал исключение с сообщением о разборе диапазона регулярных выражений в обратном порядке

Ответ №2:

Похоже, вы хотите удалить тире только с пробелом после. Попробуйте

 (?:[^w. ]|(?:-(?= )))