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?
ruby
ruby-on-rails-3
Mithun Sasidharan
fonte
fonte
my
)?Respostas:
Não causará uma exceção se a palavra substituída não estiver na frase (a
[]=
variante será).Como substituir todas as instâncias?
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"):O texto acima substituirá todas as instâncias de Robert por Joe.
fonte
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:
Expressões regulares têm limites de palavras, como
\b
quais correspondem ao início ou ao final de uma palavra. Portanto,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:
fonte
\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:
Então a sentença se tornará:
fonte
IndexError
. Caso contrário, uma palavra que não faça parte da frase levará a:string not matched (IndexError)
Primeiro, você não declara o tipo no Ruby, portanto não precisa do primeiro
string
.Para substituir uma palavra em cadeia, você faz:
sentence.gsub(/match/, "replacement")
.fonte