replacestring中的单词 – ruby

我在Ruby中有一个string:

sentence = "My name is Robert" 

如何轻松地replace这个句子中的任何一个单词而不使用复杂的代码或循环?

 sentence.sub! 'Robert', 'Joe' 

如果被replace的单词不在句子中( []= variant将不会导致exception)。

如何replace所有实例?

以上只取代“罗伯特”的第一个例子。

要replace所有实例,请使用gsub / gsub! (即“全球替代”):

 sentence.gsub! 'Robert', 'Joe' 

上述将取代罗伯特与乔的所有情况。

如果你正在处理自然语言文本,需要replace一个字,只需要把一部分string加起来,就必须在你的gsub中添加一些正则expression式。 因为纯文本replace会导致灾难性的结果:

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

正则expression式有单词边界,如\b ,匹配单词的开始或结束。 从而,

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

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

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

首先,你不要在Ruby中声明types,所以你不需要第一个string

要replacestring中的单词,请执行: sentence.gsub(/match/, "replacement")

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

 sentence ["Robert"] = "Roger" 

那么这句话就会变成:

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