La suppression de tous les caractères spéciaux d'une chaîne de rubis
je faisais les défis de pythonchallenge l'écriture de code en ruby, précisément ce. Il contient une très longue chaîne de caractères dans la page source avec des caractères spéciaux. J'essayais de trouver un moyen de les supprimer ou de vérifier les caractères alphabétique.
j'ai essayé d'utiliser la méthode de balayage, mais je pense que je pourrais ne pas l'utiliser correctement. J'ai aussi essayé delete!
comme ça:
a = "PAGE SOURCE CODE PASTED HERE"
a.delete! "!", "@" #and so on with special chars, does not work(?)
a
Comment puis-je le faire?
Merci
6 réponses
essayez avec gsub
a.gsub!(/[!@%&"]/,'')
essayez le regexp sur rubular.com
si vous voulez quelque chose de plus général vous pouvez avoir une chaîne avec des caractères valides et supprimer ce qui n'est pas là:
a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'')
lorsque vous donnez plusieurs arguments à string#delete
, c'est l'intersection de ces arguments est supprimé. a.delete! "!", "@"
supprime les intersections des ensembles !
et @
ce qui signifie que rien ne sera supprimé et que la méthode retourne nil
.
Ce que tu voulais faire a.delete! "!@"
avec les caractères à supprimer passé comme une seule chaîne.
puisque le défi est de nettoyer le désordre et de trouver un message dedans, je dirais liste blanche au lieu de supprimer des caractères spéciaux. La méthode delete accepte les plages avec -
et négations avec ^
(semblable à un regex) de sorte que vous pouvez faire quelque chose comme ceci: a.delete! "^A-Za-z "
.
vous pouvez aussi utiliser des expressions régulières comme le montre @arieljuod.
gsub
est l'une des méthodes Ruby les plus utilisées dans la nature.
specialname="Hello!#$@"
cleanedname = specialname.gsub(/[^a-zA-Z0-9\-]/,"")
si vous ne voulez pas changer la chaîne d'origine, c'est - à-dire résoudre le défi.
str.each_char do |letter|
if letter =~ /[a-z]/
p letter
end
end
je pense que a.gsub(/[^A-Za-z0-9 ]/, '')
fonctionne mieux dans ce cas. Sinon, si vous avez une phrase, qui généralement devrait commencer avec une lettre majuscule, vous perdrez votre lettre majuscule. Vous perdez également toute 1337 speak
, ou d'autres cryptes dans le texte.
exemple:
phrase = "Joe can't tell between 'large' and large."
=> "Joe can't tell between 'large' and large."
phrase.gsub(/[^a-z ]/, '')
=> "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(/[^a-z ]/, '')
=> " a fa dwn hr"
phrase2.gsub(/[^A-Za-z0-9 ]/, '')
=> "W3 a11 f10a7 d0wn h3r3"