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.