从字符串中删除所有特殊字符 - ruby

时间:2014-01-30 01:47:45

标签: ruby special-characters

我正在用pythonchallenge编写ruby中的代码specifically this one来应对挑战。它在页面源中包含一个非常长的字符串,带有特殊字符。我试图找到一种方法来删除它们/检查字母字符。

我尝试使用扫描方法,但我想我可能无法正常使用它。我也尝试了delete!

    a = "PAGE SOURCE CODE PASTED HERE"
    a.delete! "!", "@"  #and so on with special chars, does not work(?) 
    a

我该怎么做?

由于

5 个答案:

答案 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