Ruby正则表达式标点

杰布·维尔莫斯

我在编写此代码时遇到麻烦,因此它将以一个句子作为参数,并在不影响标点符号的情况下对每个单词进行翻译。

我还想继续使用分区方法。

如果我也可以将报价一起保留,那就太好了,例如:

我说:“我说过这一点。”

将是:

我说:“我要坚持下去。”

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式匹配标点空间但保留标点

来自分类Dev

正则表达式前瞻/标点模式回溯

来自分类Dev

正则表达式标点符号拆分[Python]

来自分类Dev

lix剂标点替换正则表达式

来自分类Dev

正则表达式取代标点符号

来自分类Dev

正则表达式取代标点符号

来自分类Dev

正则表达式前瞻/标点模式回溯

来自分类Dev

Ruby正则表达式提取{ | }

来自分类Dev

Ruby正则表达式组

来自分类Dev

Ruby正则表达式搜索

来自分类Dev

Ruby正则表达式问题

来自分类Dev

Ruby正则表达式方法

来自分类Dev

Ruby正则表达式匹配

来自分类Dev

Ruby罐头正则表达式?

来自分类Dev

将python搜索正则表达式转换为ruby正则表达式

来自分类Dev

正则表达式不匹配连字符和其他标点符号

来自分类Dev

正则表达式的前导空格/在标点符号之前/之后添加尾随空格

来自分类Dev

正则表达式Java标点符号后添加空间

来自分类Dev

用正则表达式删除标点符号-python

来自分类Dev

等价的正则表达式删除所有标点符号

来自分类Dev

正则表达式匹配整个单词和标点符号

来自分类Dev

日语句子正则表达式分别捕获标点符号

来自分类Dev

正则表达式,删除除()外的所有标点符号-

来自分类Dev

仅将点与标点匹配的Javascript正则表达式,无数字

来自分类Dev

Java正则表达式删除特定的标点符号

来自分类Dev

正则表达式匹配所有内容,包括Unicode标点符号

来自分类Dev

Java正则表达式匹配单词或标点符号

来自分类Dev

密码正则表达式,包含字符,数字和标点符号

来自分类Dev

正则表达式处理标点符号和文本改进