#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. ]|(?:-(?= )))