Actualmente estoy comenzando con ruby, y dentro de la tarea de mi curso se le pide que manipule las cadenas, lo que plantea una pregunta.
Dado un enlace de cadena esto:
I"m the janitor, that"s what I am!
La tarea es eliminar todo menos los caracteres de la cadena para que el resultado sea
IamthejanitorthatswhatIam
Una forma de lograr esto sería
"I"m the janitor, that"s what I am!".gsub(" ", "").gsub(",","").gsub(""","").gsub("!","")
Esto funciona pero se ve bastante torpe. Otra forma de manejar esta tarea probablemente sería expresiones regulares. ¿Hay una forma más "rubí" para lograr esto?
Gracias por adelantado
Respuestas
4 para la respuesta № 1Use una expresión regular en lugar de cadenas en .gsub
, me gusta /W/
, que coincide con caracteres que no son palabras:
ruby-1.9.3-p194 :001 > x = "I"m the janitor, that"s what I am!"
=> "I"m the janitor, that"s what I am!"
ruby-1.9.3-p194 :002 > x.gsub(/W/, "")
=> "ImthejanitorthatswhatIam"
Como señaló @nhahtdh, esto incluye números y guiones bajos.
Una expresión regular que puede realizar esta tarea sin hacerlo es /[^a-zA-Z]/
:
ruby-1.9.3-p194 :001 > x = "I"m the janitor, that"s what I am!"
=> "I"m the janitor, that"s what I am!"
ruby-1.9.3-p194 :003 > x.gsub(/[^a-zA-Z]/, "")
=> "ImthejanitorthatswhatIam"