strings regulares regular rails para octales numeros expresiones expresion contar comparar caracteres cadenas ruby special-characters

regulares - Borrar todos los caracteres especiales de una cadena-ruby



expresiones regulares ruby on rails (6)

Estaba haciendo los desafíos de pythonchallenge escribiendo código en ruby, específicamente este . Contiene una cadena muy larga en la fuente de la página con caracteres especiales. Estaba tratando de encontrar una manera de eliminarlos / verificar los caracteres alfabéticos.

Intenté usar el método de escaneo, pero creo que podría no usarlo correctamente. También intenté delete! como eso:

a = "PAGE SOURCE CODE PASTED HERE" a.delete! "!", "@" #and so on with special chars, does not work(?) a

¿Cómo puedo hacer eso?

Gracias


Creo que a.gsub(/[^A-Za-z0-9 ]/, '''') funciona mejor en este caso. De lo contrario, si tiene una oración, que normalmente debería comenzar con una letra mayúscula, perderá su letra mayúscula. También perdería 1337 speak , u otras posibles criptas dentro del texto.

Caso en punto:

phrase = "Joe can''t tell between ''large'' and large." => "Joe can''t tell between ''large'' and large."

phrase.gsub(/[^az ]/, '''') => "oe cant tell between large and large"

phrase.gsub(/[^A-Za-z0-9 ]/, '''') => "Joe cant tell between large and large"

phrase2 = "W3 a11 f10a7 d0wn h3r3!" phrase2.gsub(/[^az ]/, '''') => " a fa dwn hr"

phrase2.gsub(/[^A-Za-z0-9 ]/, '''') => "W3 a11 f10a7 d0wn h3r3"


Cuando le das múltiples argumentos a la string#delete , es la intersección de esos argumentos que se elimina. a.delete! "!", "@" a.delete! "!", "@" elimina las intersecciones de los conjuntos ! y @ que significa que no se eliminará nada y el método devuelve nil .

¡Lo que querías hacer es a.delete! "!@" a.delete! "!@" con los caracteres a eliminar pasados ​​como una sola cadena.

Ya que el desafío es pedir que se limpie el desorden y encontrar un mensaje en él, me gustaría ir con una lista blanca en lugar de eliminar caracteres especiales. El método de eliminación acepta rangos con - y negaciones con ^ (similar a una expresión regular) para que pueda hacer algo como esto: a.delete! "^A-Za-z " a.delete! "^A-Za-z " .

También puede usar expresiones regulares como se muestra en @arieljuod.


Puedes hacerlo

a.gsub!(/[^0-9A-Za-z]/, '''')


Si no desea cambiar la cadena original, es decir, para resolver el desafío.

str.each_char do |letter| if letter =~ /[a-z]/ p letter end end


prueba con gsub

a.gsub!(/[!@%&"]/,'''')

prueba la expresión regular en rubular.com

Si quieres algo más general, puedes tener una cadena con caracteres válidos y eliminar lo que no está allí:

a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'''')


gsub es uno de los métodos de Ruby más utilizados en la naturaleza.

specialname="Hello!#$@" cleanedname = specialname.gsub(/[^a-zA-Z0-9/-]/,"")