Заменить слова в строке-Ruby

У меня есть строка в Ruby:

sentence = "My name is Robert"

Как я могу легко заменить любое слово в этом предложении без использования сложного кода или цикла?

4 ответов


sentence.sub! 'Robert', 'Joe'

не вызовет исключения, если замененное слово не находится в предложении ([]= вариант).

как заменить все экземпляры?

вышеизложенное заменяет только первый экземпляр "Robert".

для замены всех экземпляров используйте gsub/gsub! (т. е. "global substitution"):

sentence.gsub! 'Robert', 'Joe'

вышеуказанное заменит все экземпляры Robert на Joe.


если вы имеете дело с текстом на естественном языке и вам нужно заменить слово, а не только часть строки, вам нужно добавить щепотку регулярных выражений в свой 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/, 'цукор')
=> "цукор у кисіль, для весіль"

Вы можете попробовать использовать таким образом :

sentence ["Robert"] = "Roger"

тогда предложение станет :

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

во-первых, вы не объявляете тип в Ruby, поэтому вам не нужен первый string.

заменить слово в строке, вы: sentence.gsub(/match/, "replacement").