like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей

Регулярное выражение: убрать спецсимволы между определёнными символами

Добрый вечер, помогите, пожалуйста, составить регэксп. Нужно заменить вобщем-то все спецсимволы в любых позициях за исключением "-"(минус) между ### .... ###
Что имеем, к примеру: ###Nine-Hours-in-November:-The-Love-in-Action-Sessions,-Vol.-1###
Что должно быть на выходе: ###Nine-Hours-in-November-The-Love-in-Action-Sessions-Vol-1###
Примечание: регэксп нужен грубо говоря для Нотепада
Можно на примере замены одного любого символа
P.S.: разумеется ну жно не просто заменить какой-то символ, а найти спецсимвол именно в этой конструкции, потому как кроме всего прочего в исходном тексте много тех же спецсимволов, которые не должны быть затронуты
  • Вопрос задан
  • 3184 просмотра
Решения вопроса 1
@bes_internal
webdev: perl, gentoo, html/css
Для простого replace в редакторе невозможно составить такой regexp. Но вот вам программа на perl, которая делает то, что вы хотите:

$str=q^
###Nine-Hours-in-November:-The-Love-in-Action-Sessions,-Vol.-1###
###S!-@#$%&*\^()_+|,./\E###
###S!z@z#z$z%zz&z*z(z)z_z-z+z|z,z.z/z\zE###  ###S1!z@z#z$z%zz&z*z(z)z_z-z+z|z,z.z/z\zE2###
^;

$str=~s!###(.*?)###!sub{my $str="$1"; $str=~s/[\Q\!@#\$%^&*()+,._|\/\E]//g; return $str}->()!eg;
print "$str\n";


Вам нужно пойти на online интерпретатор perl, например вот сюда или сюда. Вставить предложенный код и свои строки в первую переменную. Обратите внимаение, что началом и концом этой строки являются символы "^". Поэтому внутри текста этот символ должен быть экранирован (\^).
Программа находит строки заключенные в в "###", где в каждой убирает спецсимволы.
После запуска внизу вы получите "очищенный" результат.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы