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?
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.
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/, 'цукор')
=> "цукор у кисіль, для весіль"
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
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")
.
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