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

kwo*_*icz 47 ruby special-characters

我正在用python挑战来编写ruby中的代码,特别是这个.它在页面源中包含一个非常长的字符串,带有特殊字符.我试图找到一种方法来删除它们/检查字母字符.

我尝试使用扫描方法,但我想我可能不会正确使用它.我也尝试过delete!:

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

我怎样才能做到这一点?

谢谢

Alo*_*and 118

你可以这样做

a.gsub!(/[^0-9A-Za-z]/, '')
Run Code Online (Sandbox Code Playgroud)


ari*_*uod 11

尝试使用gsub

a.gsub!(/[!@%&"]/,'')
Run Code Online (Sandbox Code Playgroud)

试试rubular.com上的正则表达式

如果你想要更通用的东西,你可以拥有一个包含有效字符的字符串,并删除那里没有的内容:

a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'')
Run Code Online (Sandbox Code Playgroud)

  • 为什么不``[^ az]`? (8认同)
  • 在这种情况下,我认为这个 `[^A-Za-z ]` 效果更好。否则,如果您有一个句子,通常**应该**以大写字母开头,您将丢失大写字母。您还将丢失任何“1337 说话”或文本中其他可能的隐匿处。举个例子:`phrase = "Joe 无法区分 'large' 和 large。" =>“乔无法区分“大”和“大”。”` (2认同)

dee*_*see 6

当你给出多个参数时string#delete,它就是那些被删除的参数的交集.a.delete! "!", "@"删除组的交点!@这意味着没有将被删除并且该方法返回nil.

你想要做的是a.delete! "!@"将要删除的字符作为单个字符串传递.

由于挑战是要求清理混乱并在其中找到消息,我将使用白名单而不是删除特殊字符.delete方法接受带有-和否定的范围^(类似于正则表达式),所以你可以这样做:a.delete! "^A-Za-z ".

你也可以使用@arieljuod所示的正则表达式.


小智 5

gsub 是野外最常用的Ruby方法之一.

specialname="Hello!#$@"
cleanedname = specialname.gsub(/[^a-zA-Z0-9\-]/,"") 
Run Code Online (Sandbox Code Playgroud)


Tha*_*ick 5

我认为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(/[^a-z ]/, '') => "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(/[^a-z ]/, '') => " a fa dwn hr"

phrase2.gsub(/[^A-Za-z0-9 ]/, '') => "W3 a11 f10a7 d0wn h3r3"