Ruby 替换标点符号?

Ruby 替换标点符号?,ruby,string,replace,Ruby,String,Replace,我的任务是将'you'、'u'和'youuuu'(使用'u'的数字)的所有实例替换为'your side')字符串 这是我的密码: def autocorrect(input) words = input.split() words.each do |word| if word == 'u' || word == 'you' word.replace 'your sister' elsif word.include? 'you' word.repl

我的任务是将
'you'
'u'
'youuuu'
(使用
'u'
的数字)的所有实例替换为
'your side'
)字符串

这是我的密码:

def autocorrect(input)
  words = input.split()
  words.each do |word|
    if word == 'u' || word == 'you'
      word.replace 'your sister'
    elsif word.include? 'you'
      word.replace 'your sister'
    end
  end
  words = words.join(' ')
  words
end
我的代码正确地替换了单词,但它也删除了标点符号。我明白了:

autocorrect("I miss you!")
# => "I miss your sister"

输出中没有感叹号。有人知道为什么会发生这种情况吗?

我想你可以用gsub代替,用你姐姐代替你,这样它就保留了感叹号

因为
replace
将替换正在传递的整个字符串,例如:

p 'you!'.replace('your sister')     # => "your sister"
p 'you!'.gsub(/you/, 'your sister') # => "your sister!"
因此,您可以尝试:

def autocorrect(input)
  words = input.split()
  words.each do |word|
    if word == 'u' || word == 'you'
      word.replace 'your sister'
    elsif word.include? 'you'
      word.gsub!(/you/, 'your sister') 
    end
  end
  words = words.join(' ')
  words
end

p autocorrect("I miss you!")
# => "I miss your sister!"

注意:在输入中使用gsub将获得预期的输出。

我认为,您可以使用gsub,将
you
替换为妹妹,这样它就保留了感叹号

因为
replace
将替换正在传递的整个字符串,例如:

p 'you!'.replace('your sister')     # => "your sister"
p 'you!'.gsub(/you/, 'your sister') # => "your sister!"
因此,您可以尝试:

def autocorrect(input)
  words = input.split()
  words.each do |word|
    if word == 'u' || word == 'you'
      word.replace 'your sister'
    elsif word.include? 'you'
      word.gsub!(/you/, 'your sister') 
    end
  end
  words = words.join(' ')
  words
end

p autocorrect("I miss you!")
# => "I miss your sister!"

注意:在输入中使用gsub可以得到预期的输出。

在ruby中使用空格分割字符串时,它会使用标点符号


试着拆分一个句子,比如“我喜欢糖果!”并检查最后一个元素。你会注意到是“糖果”这个词,感叹号等等

在ruby中拆分带空格的字符串时,会使用标点符号


试着拆分一个句子,比如“我喜欢糖果!”并检查最后一个元素。你会注意到是“糖果”这个词,感叹号等等

部分基于对该问题的评论,我假设要替换的子字符串不能在前面或后面紧跟字母

r = /
    (?<!\p{alpha}) # do not match a letter (negative lookbehind)
    (?:            # begin non-capture group
      you+         # match 'yo' followed by one of more 'u's
      |            # or
      u            # match 'u'
    )              # close non-capture group
    (?!\p{alpha})  # do not match a letter (negative lookahead)
    /x             # free-spacing regex definition mode

"uyou you youuuuuu &you% u ug".gsub(r, "your sister")
  #=> "uyou your sister your sister &your sister% your sister ug"
r=/
(?“你姐姐你姐姐&你姐姐%ug你姐姐”
这个正则表达式是按惯例编写的

/(?<!\p{alpha})(?:you+|u)(?!\p{alpha})/

/(?部分基于对该问题的评论,我假设要替换的子字符串不能在前面或后面紧跟字母

r = /
    (?<!\p{alpha}) # do not match a letter (negative lookbehind)
    (?:            # begin non-capture group
      you+         # match 'yo' followed by one of more 'u's
      |            # or
      u            # match 'u'
    )              # close non-capture group
    (?!\p{alpha})  # do not match a letter (negative lookahead)
    /x             # free-spacing regex definition mode

"uyou you youuuuuu &you% u ug".gsub(r, "your sister")
  #=> "uyou your sister your sister &your sister% your sister ug"
r=/
(?“你姐姐你姐姐&你姐姐%ug你姐姐”
这个正则表达式是按惯例编写的

/(?<!\p{alpha})(?:you+|u)(?!\p{alpha})/

/(?字符串“uyou youuu”的期望返回值是多少。我意识到我的代码不适用于所有测试。该字符串的期望输出为“uyou your sister your sister”,测试要求替换“you”,但不是当它是另一个词的一部分时。这就是我刚刚通过测试的方式:def autocorrect(input)input.gsub(/\b(you+| u)\b/i,'your sister')end在单词边界之间查找'you'和附加的任意数量的'u'。比我写的要短得多,regex是一个强大的工具。…字符串“uyou youuuu”的期望返回值是多少。我意识到我的代码不适用于所有测试。期望的输出是“uyou your sister your sister”,测试要求替换“you”,但不是当它是另一个单词的一部分时。这就是我刚刚通过测试的方式:def autocorrect(input)input.gsub(/\b(you+|u)\b/I,“your sister”)end在单词边界之间寻找“you”和附加的任意数量的“u”…比我写的要短得多,regex是一个强大的工具。。。。