Tengo una cadena en Ruby:
sentence = "My name is Robert"
¿Cómo puedo reemplazar fácilmente cualquier palabra en esta oración sin usar código complejo o un bucle?
ruby
ruby-on-rails-3
Mithun Sasidharan
fuente
fuente
my
)?Respuestas:
No causará una excepción si la palabra reemplazada no está en la oración (la
[]=
variante sí lo hará).¿Cómo reemplazar todas las instancias?
Lo anterior reemplaza solo la primera instancia de "Robert".
Para reemplazar todas las instancias use
gsub
/gsub!
(es decir, "sustitución global"):Lo anterior reemplazará todas las instancias de Robert con Joe.
fuente
Si está tratando con texto en lenguaje natural y necesita reemplazar una palabra, no solo parte de una cadena, debe agregar una pizca de expresiones regulares a su gsub ya que una sustitución de texto sin formato puede conducir a resultados desastrosos:
Las expresiones regulares tienen límites de palabras, como
\b
qué coincide con el inicio o el final de una palabra. Así,En Ruby, a diferencia de otros idiomas como Javascript, los límites de palabras son compatibles con UTF-8, por lo que puede usarlo para idiomas con alfabetos latinos no latinos o extendidos:
fuente
\b
que no funciona en ellos, en esos casos necesitaría usar analizadores morfológicos o cosas así. Además, +1 por ejemplo hilarante.Puedes intentar usarlo de esta manera:
Entonces la oración se convertirá en:
fuente
IndexError
. De lo contrario, una palabra que no forma parte de la oración dará lugar a:string not matched (IndexError)
Primero, no declaras el tipo en Ruby, así que no necesitas el primero
string
.Para reemplazar una palabra en la cadena, que hace:
sentence.gsub(/match/, "replacement")
.fuente