regulares manejo expresiones cadenas ruby ruby-on-rails-3

manejo - Reemplazar palabras en una cadena-Ruby



expresiones regulares en ruby (4)

Tengo una cadena en Ruby:

sentence = "My name is Robert"

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


Primero, no declara el tipo en Ruby, por lo que no necesita la primera string .

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


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


Si está tratando con texto en lenguaje natural y necesita reemplazar una palabra, no solo parte de una cadena, debe agregar un pellizco de expresiones regulares a su gsub, ya que una sustitución de texto sin formato puede llevar a resultados desastrosos:

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

Las expresiones regulares tienen límites de palabras, como /b que coincide 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 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:

''сіль у кисіль, для весіль''.gsub(//bсіль/b/, ''цукор'') => "цукор у кисіль, для весіль"


sentence.sub! ''Robert'', ''Joe''

No causará una excepción si la palabra reemplazada no está en la oración (la variante []= hará).

¿Cómo reemplazar todas las instancias?

Lo anterior reemplaza solo la primera instancia de "Robert".

Para reemplazar todas las instancias usa gsub / gsub! (es decir, "sustitución global"):

sentence.gsub! ''Robert'', ''Joe''

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