替换字符串中的单词-Ruby
我在Ruby中有一个字符串:替换字符串中的单词-Ruby,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我在Ruby中有一个字符串: sentence = "My name is Robert" 如何在不使用复杂代码或循环的情况下轻松替换此句子中的任何一个单词?您可以尝试使用以下方法: sentence ["Robert"] = "Roger" 然后这句话将变成: sentence = "My name is Roger" # Robert is replaced with Roger 首先,您不需要在Ruby中声明类型,因此不需要第一个字符串 要替换字符串中的单词,可以执行以下操作:句子.
sentence = "My name is Robert"
如何在不使用复杂代码或循环的情况下轻松替换此句子中的任何一个单词?您可以尝试使用以下方法:
sentence ["Robert"] = "Roger"
然后这句话将变成:
sentence = "My name is Roger" # Robert is replaced with Roger
首先,您不需要在Ruby中声明类型,因此不需要第一个
字符串
要替换字符串中的单词,可以执行以下操作:句子.gsub(/match/,“replacement”)
如果替换的单词不在句子中,则不会导致异常(变体将出现)
如何替换所有实例?
以上仅替换“Robert”的第一个实例
要替换所有实例,请使用gsub
/gsub代码>(即“全球替代”):
以上内容将用Joe替换Robert的所有实例。如果您处理的是自然语言文本,并且需要替换一个单词,而不仅仅是字符串的一部分,则必须向gsub中添加少量正则表达式,因为纯文本替换可能会导致灾难性的结果:
'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)或特定单词(my
)?感谢您提出的简短、简单且有用的问题。它帮助我找到了在我的视图中设置hashtags样式的解决方案,这非常有趣。我以前从未见过这种替换方法。如果原始字符串不包含您要替换的单词,您会发现这种方法有错误吗?请确保在索引器上继续执行。否则,对于不属于句子一部分的单词将导致:字符串不匹配(索引器)
此方法的另一个问题是,它只替换字符串的第一个实例。这很有趣,但绝对不应标记为正确答案。这似乎只替换第一个实例,当然,这有时是好的,有时不是。@JasonSwett更新了答案以涵盖如何替换所有实例。使用sub时要小心代码>和gsub代码>在字符串文字上-应使用非感叹号版本。字符串文本在Ruby 3中是不可变的,这将引发一个异常。请注意,有些语言甚至不使用空格,因此\b
在这些语言中不起作用,在这些情况下,您需要使用形态分析器或类似的东西。另外,对于搞笑的例子,+1。
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"