Заменить слова в строке-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")
.