Reemplazar palabras en una cadena-Ruby


Tengo una cadena en Ruby:

sentence = "My name is Robert"

¿Cómo puedo reemplazar una palabra en esta oración fácilmente sin usar código complejo o un bucle?

Author: Blubber, 2011-12-05

4 answers

sentence.sub! 'Robert', 'Joe'

No causará una excepción si la palabra reemplazada no está en la oración (la variante []= 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! (ie. "sustitución global"):

sentence.gsub! 'Robert', 'Joe'

Lo anterior reemplazará todas las instancias de Robert con Joe.

 410
Author: srcspider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-01 21:02:02

Si se trata de texto en lenguaje natural y necesita reemplazar una palabra, no solo una 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:

'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"

Las expresiones regulares tienen límites de palabras, como \b que coinciden con el inicio o el final de una palabra. Así,

'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"

En Ruby, a diferencia de otros lenguajes 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:

'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
 92
Author: Hnatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-20 19:32:10

Puedes intentar usar de esta manera :

sentence ["Robert"] = "Roger"

Entonces la oración se convertirá en:

sentence = "My name is Roger" # Robert is replaced with Roger
 46
Author: Mithun Sasidharan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-10 09:02:18

Primero, no declaras el tipo en Ruby, así que no necesitas el primer string.

Para reemplazar una palabra en cadena, debes hacer: sentence.gsub(/match/, "replacement").

 41
Author: Sean Hill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-05 05:55:37