如何删除Ruby中字符串中的最后一个元音?

如何在字符串中定义-last元音?

例如,我有一个单词“经典”

我想找到“classs i 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 

 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