/ / ¿Eliminar todo menos los caracteres de una cadena? [cerrado] - rubí

¿Eliminar todo menos los caracteres de una cadena? [cerrado] - ruby

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 № 1

Use 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"