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