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