У меня есть строка в Ruby:
sentence = "My name is Robert"
Как я могу легко заменить одно слово в этом предложении, не используя сложный код или цикл?
ruby
ruby-on-rails-3
Митхун Сасидхаран
источник
источник
my
)?Ответы:
Не вызовет исключения, если замененное слово отсутствует в предложении (
[]=
вариант будет).Как заменить все экземпляры?
Вышесказанное заменяет только первый экземпляр «Роберта».
Для замены всех экземпляров используйте
gsub
/gsub!
(т. Е. «Глобальное замещение»):Все вышеперечисленное заменит Роберта на Джо.
источник
Если вы имеете дело с текстом на естественном языке и вам нужно заменить слово, а не только часть строки, вам нужно добавить в ваш gsub щепотку регулярных выражений, поскольку подстановка простого текста может привести к катастрофическим результатам:
Регулярные выражения имеют границы слов, например,
\b
которые соответствуют началу или концу слова. Таким образом,В Ruby, в отличие от некоторых других языков, таких как Javascript, границы слов совместимы с UTF-8, поэтому вы можете использовать его для языков с нелатинскими или расширенными латинскими алфавитами:
источник
\b
в них не работает, вам придется использовать морфологические анализаторы или тому подобное в этих случаях. Также +1 за веселый пример.Вы можете попробовать использовать этот способ:
Тогда предложение станет:
источник
IndexError
. В противном случае слово, не являющееся частью предложения, приведет к:string not matched (IndexError)
Во-первых, вы не объявляете тип в Ruby, поэтому вам не нужно первое
string
.Чтобы заменить слово в строке, вы делаете:
sentence.gsub(/match/, "replacement")
.источник