У меня есть строка в Ruby:
sentence = "My name is Robert"
Как я могу легко заменить одно слово в этом предложении, не используя сложный код или цикл?
У меня есть строка в Ruby:
sentence = "My name is Robert"
Как я могу легко заменить одно слово в этом предложении, не используя сложный код или цикл?
Ответы:
sentence.sub! 'Robert', 'Joe'
Не вызовет исключения, если замененное слово отсутствует в предложении ( []=
вариант будет).
Вышесказанное заменяет только первый экземпляр «Роберта».
Для замены всех экземпляров используйте gsub
/ gsub!
(т. Е. «Глобальное замещение»):
sentence.gsub! '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/, 'цукор')
=> "цукор у кисіль, для весіль"
\b
в них не работает, вам придется использовать морфологические анализаторы или тому подобное в этих случаях. Также +1 за веселый пример.
Вы можете попробовать использовать этот способ:
sentence ["Robert"] = "Roger"
Тогда предложение станет:
sentence = "My name is Roger" # Robert is replaced with Roger
IndexError
. В противном случае слово, не являющееся частью предложения, приведет к:string not matched (IndexError)
my
)?