Как удалить последний гласный в строке в Ruby?

Как я могу определить последний гласный в строке?

Например, у меня есть слово "классический"

Я хочу найти, что последним гласным слова "classsi c" является буква "i", и удалить этот последний гласный.

Я думаю:

def vowel(str)
  result = ""
  new = str.split(" ")
  i = new.length - 1
  while i < new.length
    if new[i] == "aeiou"
      new[i].gsub(/aeiou/," ")
    elsif new[i] != "aeiou"
      i = -= 1
    end
  end
  return result
end

3 ответа

r = /
    .*      # match zero or more of any character, greedily
    \K      # discard everything matched so far
    [aeiou] # match a vowel
    /x      # free-spacing regex definition mode

"wheelie".sub(r,'') #=> "wheeli"
"though".sub(r,'')  #=> "thogh"
"why".sub(r,'')     #=> "why" 

Как указал @aetherus: переверните строку, удалите первую гласную, а затем переверните ее обратно:

str = "classic"
=> "classic"
str.reverse.sub(/[aeiou]/, "").reverse
=> "classc"
regex = /[aeiou](?=[^aeiou]*\z)/
  • [aeiou] соответствует одной гласной

  • [^aeiou]* соответствует не гласным символам 0 или более раз

  • \z соответствует концу строки

  • (?=...) положительно смотрит в будущее и не включает матч в окончательный результат.

Вот несколько примеров:

"classic".sub(regex, '') #=> "classc"
  "hello".sub(regex, '') #=> "hell"
  "crypt".sub(regex, '') #=> "crypt
Другие вопросы по тегам