Удалить все восклицательные знаки из конца предложения

#regex #string

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

Вопрос:

Мне нужно несколько строк кода, чтобы удалить все восклицательные знаки («!»), начиная с конца предложения. Код должен достичь следующего:

 "Hi!" --> "Hi"
"Hi!!!" --> "Hi"
"!Hi") --> "!Hi"
"Hi! Hi!") --> "Hi! Hi"
  

Однако я пытался использовать регулярное выражение (отрицательный прогноз), но безуспешно:

 /(?!^)!/g
  

Краткое объяснение решения было бы весьма полезно. Спасибо!

Ответ №1:

Вам не нужен предварительный просмотр. Просто сопоставьте восклицательные знаки в конце и замените их пустой строкой. В PHP это:

 $string = preg_replace('/! $/', '', $string);
  

Ответ №2:

Вы должны использовать $ якорь, который отмечает конец строки:

 /! $/gm
  

m Флаг присутствует на случай, если у вас многострочная строка.

Ответ №3:

Я даю вам решение, которое я реализовал в javascript. Я не знаю, какой язык вы используете, но в любом случае логика остается прежней.

 var text = "!Hi! Hi!!";
var i=text.length - 1;
while(text[i] == "!"){
   i--;
}
finalText = text.substring(0,i 1);
console.log(finalText);

Output: !Hi! Hi
  

Вы можете использовать ту же логику для реализации на используемом вами языке программирования. Если вы хотите использовать регулярное выражение, то решение, упомянутое @Barmar выше, будет работать отлично!

Ответ №4:

 def remove(s):
    return s[:-1] if s.endswith('!') else s
  

Это должно быть хорошо

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

1. Это удаляет только последний! в строке не учитывается, есть ли их несколько!! в конце строки.