从string中删除所有特殊字符 – ruby
我正在从pythonchallenge写ruby代码挑战, 特别是这一个 。 它在页面源代码中包含一个非常长的string,并带有特殊字符 我试图find一种方法来删除它们/检查字母字符。
我尝试使用扫描方法,但我想我可能不会正确使用它。 我也试过delete! 像那样: 
  a = "PAGE SOURCE CODE PASTED HERE" a.delete! "!", "@" #and so on with special chars, does not work(?) a 
我怎样才能做到这一点?
谢谢
你可以这样做
 a.gsub!(/[^0-9A-Za-z]/, '') 
尝试与gsub
 a.gsub!(/[!@%&"]/,'') 
尝试rubular.com上的正则expression式
如果你想要更一般的东西,你可以有一个string有效的字符,并删除不在那里:
 a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'') 
 当你给string#delete多个参数时,这些参数的交集被删除。 a.delete! "!", "@"  a.delete! "!", "@"删除集合的交集! 和@这意味着什么都不会被删除,方法返回nil 。 
 你想做的是a.delete! "!@"  a.delete! "!@"将要删除的字符作为单个string传递。 
 由于挑战是要清理混乱,并find一条消息,我会去白名单,而不是删除特殊字符。 删除方法接受范围与-和否定与^ (类似于正则expression式),所以你可以做这样的事情: a.delete! "^A-Za-z "  a.delete! "^A-Za-z " 。 
您也可以使用@arieljuod所示的正则expression式。
  gsub是野外最常用的Ruby方法之一。 
 specialname="Hello!#$@" cleanedname = specialname.gsub(/[^a-zA-Z0-9\-]/,"") 
如果你不想改变原来的string – 即解决挑战。
 str.each_char do |letter| if letter =~ /[az]/ p letter end end 
 我认为a.gsub(/[^A-Za-z0-9 ]/, '')在这种情况下效果更好。 否则,如果你有一个通常应该以大写字母开头的句子,你将失去你的大写字母。 你也将失去任何1337 speak ,或在文本中的其他可能的隐窝。 
例如:
 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"