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
\bqué 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
\bque 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