替换字符串中的单词 - Ruby

时间:2011-12-05 05:53:10

标签: ruby ruby-on-rails-3

我在Ruby中有一个字符串:

sentence = "My name is Robert"

如果不使用复杂的代码或循环,如何轻松替换此句中的任何一个单词?

4 个答案:

答案 0 :(得分:447)

sentence.sub! 'Robert', 'Joe'

如果被替换的单词不在句子中([]=变体将会出现),则不会导致异常。

如何替换所有实例?

以上仅替换“Robert”的第一个实例。

要使用gsub / gsub!替换所有实例(即“全局替换”):

sentence.gsub! 'Robert', 'Joe'

上述内容将取代Robert与Joe的所有实例。

答案 1 :(得分:113)

如果您正在处理自然语言文本并且需要替换单词,而不仅仅是字符串的一部分,则必须向gsub添加一些正则表达式,因为纯文本替换会导致灾难性的结果:< / p>

'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"

正则表达式具有单词边界,例如\b匹配单词的开头或结尾。因此,

'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"

在Ruby中,与Javascript等其他语言不同,单词边界与UTF-8兼容,因此您可以将它用于非拉丁语或扩展拉丁字母的语言:

'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"

答案 2 :(得分:50)

您可以尝试使用这种方式:

sentence ["Robert"] = "Roger"

然后句子将成为:

sentence = "My name is Roger" # Robert is replaced with Roger

答案 3 :(得分:43)

首先,您没有在Ruby中声明类型,因此您不需要第一个string

要替换字符串中的单词,请执行以下操作:sentence.gsub(/match/, "replacement")