我正在用pythonchallenge编写ruby中的代码specifically this one来应对挑战。它在页面源中包含一个非常长的字符串,带有特殊字符。我试图找到一种方法来删除它们/检查字母字符。
我尝试使用扫描方法,但我想我可能无法正常使用它。我也尝试了delete!
:
a = "PAGE SOURCE CODE PASTED HERE"
a.delete! "!", "@" #and so on with special chars, does not work(?)
a
我该怎么做?
由于
答案 0 :(得分:114)
你可以这样做
a.gsub!(/[^0-9A-Za-z]/, '')
答案 1 :(得分:10)
尝试使用gsub
a.gsub!(/[!@%&"]/,'')
在rubular.com上试用regexp
如果你想要更通用的东西,你可以拥有一个包含有效字符的字符串,并删除那里没有的内容:
a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'')
答案 2 :(得分:5)
当您为string#delete
提供多个参数时,它是被删除的参数的交集。 a.delete! "!", "@"
会删除集合!
和@
的交叉点,这意味着不会删除任何内容,并且该方法会返回nil
。
您要做的是a.delete! "!@"
,要删除的字符作为单个字符串传递。
由于挑战是要求清理混乱并在其中找到消息,我会使用白名单而不是删除特殊字符。删除方法接受带有-
的范围和带有^
的否定(类似于正则表达式),因此您可以执行以下操作:a.delete! "^A-Za-z "
。
你也可以使用正则表达式,如@arieljuod。
所示答案 3 :(得分:5)
gsub
是野外最常用的Ruby方法之一。
specialname="Hello!#$@"
cleanedname = specialname.gsub(/[^a-zA-Z0-9\-]/,"")
答案 4 :(得分:2)
如果您不想更改原始字符串 - 即解决问题。
str.each_char do |letter|
if letter =~ /[a-z]/
p letter
end
end