我在编写此代码时遇到麻烦,因此它将以一个句子作为参数,并在不影响标点符号的情况下对每个单词进行翻译。
我还想继续使用分区方法。
如果我也可以将报价一起保留,那就太好了,例如:
我说:“我说过这一点。”
将是:
我说:“我要坚持下去。”
def convert_sentence_pig_latin(sentence)
p split_sentence = sentence.split(/\W/)
pig_latin_sentence = []
split_sentence.each do |word|
if word.match(/^[^aeiou]+/x)
pig_latin_sentence << word.partition(/^[^aeiou]+/x)[2] + word.partition(/^[^aeiou]+/x)[1] + "ay"
else
pig_latin_sentence << word
end
end
rejoined_pig_sentence = pig_latin_sentence.join(" ").downcase + "."
p rejoined_pig_sentence.capitalize
end
convert_sentence_pig_latin("Mary had a little lamb.")
您的主要问题是[^aeiou]
匹配该范围之外的每个字符,包括空格,逗号,引号等。
如果我是你,我会为辅音使用正数匹配,即。[b-df-hj-np-tv-z]
我还将该正则表达式放入变量中,因此您不必重复三遍。
另外,如果您有兴趣,有一种方法可以使您的convert_sentence_pig_latin
方法成为单个gsub,它将一遍处理整个句子。
...因为你问...
sentence.gsub( /\b([b-df-hj-np-tv-z])(\w+)/i ) { "#{$2}#{$1}ay" }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句