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

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

sentence = "My name is Robert"

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

Ответ 1

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

sentence ["Robert"] = "Roger"

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

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

Ответ 2

sentence.sub! 'Robert', 'Joe'

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

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

Вышеупомянутый заменяет только первый экземпляр "Роберт".

Чтобы заменить все экземпляры, используйте gsub/gsub! (т.е. глобальная замена):

sentence.gsub! 'Robert', 'Joe'

Вышеупомянутое заменит все экземпляры Роберта Джо.

Ответ 3

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

Ответ 4

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

Чтобы заменить слово в строке, выполните следующие действия: sentence.gsub(/match/, "replacement").