Eu tenho uma string no Ruby:
sentence = "My name is Robert"
Como posso substituir facilmente qualquer palavra nesta frase sem usar código complexo ou loop?
Eu tenho uma string no Ruby:
sentence = "My name is Robert"
Como posso substituir facilmente qualquer palavra nesta frase sem usar código complexo ou loop?
Respostas:
sentence.sub! 'Robert', 'Joe'
Não causará uma exceção se a palavra substituída não estiver na frase (a []=
variante será).
O exemplo acima substitui apenas a primeira instância de "Robert".
Para substituir todas as instâncias, use gsub
/ gsub!
(ou seja, "substituição global"):
sentence.gsub! 'Robert', 'Joe'
O texto acima substituirá todas as instâncias de Robert por Joe.
Se você estiver lidando com texto em idioma natural e precisar substituir uma palavra, não apenas parte de uma string, precisará adicionar uma pitada de expressões regulares ao seu gsub, pois uma substituição de texto sem formatação pode levar a resultados desastrosos:
'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"
Expressões regulares têm limites de palavras, como \b
quais correspondem ao início ou ao final de uma palavra. Portanto,
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
Em Ruby, diferentemente de outros idiomas como Javascript, os limites de palavras são compatíveis com UTF-8, portanto, você pode usá-lo para idiomas com alfabetos latinos não latinos ou estendidos:
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
\b
, não funcionam nelas, você precisaria usar analisadores morfológicos ou coisas assim nesses casos. Além disso, +1 para um exemplo hilário.
Você pode tentar usar desta maneira:
sentence ["Robert"] = "Roger"
Então a sentença se tornará:
sentence = "My name is Roger" # Robert is replaced with Roger
IndexError
. Caso contrário, uma palavra que não faça parte da frase levará a:string not matched (IndexError)
my
)?