#regex
#регулярное выражение
Вопрос:
Я пытаюсь выбрать строку перед некоторыми символами
Пример
Ввод
test1_day1_20204503642_sye_somestring-signed.bin
test2_day2_20205032456_ade_signed.bin
test2_day3_20204503425_arj.bin
Вывод
test1_day1_20204503642_sye_somestring
test2_day2_20205032456_ade
test2_day3_20204503425_arj
Я хочу удалить -signed.bin,_signed.bin и .bin из строки. Как я могу это сделать с помощью регулярного выражения?
Заранее спасибо.
Комментарии:
1. да, я пробовал это (.*?).bin. здесь я не могу добавить группу в check -signed
2. Сопоставьте
(?:[_-]signed)?.bin$
и замените на""
. Проверьте эту демонстрацию: regex101.com/r/0Wchep/1
Ответ №1:
Вы можете использовать шаблон ([-_]signed){0,1}.bin$
и заменить эти символы пробелом
Давайте возьмем приведенный ниже код на Perl
$str = 'test1_day1_20204503642_sye_somestring-signed.bin'
$extracted_str =~ s/([-_]signed){0,1}.bin$//gi
print $extracted_str
Комментарии:
1. Спасибо, шреяскар. И ваш ответ, и ответ @anubhava работают.
2.
.
должно быть экранировано в регулярном выражении и{0,1}
может быть записано как?
3. @anubhava да. это хорошая практика. спасибо за упоминание.
4. Не просто хорошая практика, неэкранированная точка может дать неверный результат, поскольку она будет совпадать
-bin
иXbin
также в конце.