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)
我怎样才能做到这一点?
谢谢
ari*_*uod 11
尝试使用gsub
a.gsub!(/[!@%&"]/,'')
Run Code Online (Sandbox Code Playgroud)
试试rubular.com上的正则表达式
如果你想要更通用的东西,你可以拥有一个包含有效字符的字符串,并删除那里没有的内容:
a.gsub!(/[^abcdefghijklmnopqrstuvwxyz ]/,'')
Run Code Online (Sandbox Code Playgroud)
当你给出多个参数时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)
我认为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"
归档时间: |
|
查看次数: |
55686 次 |
最近记录: |