2009-11-19 13 views
11

Tengo algún problema para reemplazar la cadena en Ruby.¿Cómo puede Ruby hacer esta tarea (búsqueda de cadenas insensibles a mayúsculas y reemplazar en Ruby)?

Mi serie original: Lo que hace el ser humano no es como lo que hace el animal.

Quiero reemplazar a: == Lo que el humano == no es como == lo que == animal hace.

Me enfrento al problema de mayúsculas y minúsculas cuando uso gsub. (por ej., qué, qué) quiero conservar el texto original.

¿Alguna solución?

+2

un mejor título podría ser: "Caso insensible a la cadena de búsqueda y reemplazar en Ruby". Cambiar el título a algo así podría ayudarlo a que más personas vean su pregunta. – donut

Respuesta

20

Si he entendido bien esto es lo que quiere hacer:

puts "What the human does is not like what animal does.".gsub(/(what)/i, '==\1==') 

cual es la salida

== == Lo que el ser humano no es como lo == == animales hace.

+0

Ejemplo actualizado utilizando el indicador de mayúsculas y minúsculas en la expresión regular como lo sugirió brianegge. – hallski

2

Utilice block form of gsub.

"What the human does is not like what animal does.".gsub(/(what)/i) { |s| "==#{s}==" } 
=> "==What== the human does is not like ==what== animal does." 
+0

Estaba escribiendo exactamente lo mismo. Aquí está la documentación de gsub: http://ruby-doc.org/core/classes/String.html#M000817 –

+0

Enlace actualizado: http://ruby-doc.org/core-2.3.3/String.html# method-i-gsub – Josh

2

otra versión sin paréntesis() en expresiones regulares,

puts "What the human does is not like what animal does.".gsub(/what/i,'==\0==') 

== == Lo que el ser humano no es como lo == == animales hace.

3

Lo importante a tener en cuenta en las 3 respuestas hasta ahora, es el uso del modificador "i" en la expresión regular. Esta es la forma abreviada de especificar el uso de la opción Regexp::IGNORECASE.

Un tutorial útil Rubí Regexp es here y la clase se documenta here

Cuestiones relacionadas