如何去除所有不是单词字符的字符的Ruby字符串?

时间:2013-11-04 22:16:19

标签: ruby regex

如何在Ruby中删除所有不是单词字符(a-z,任何数字)的字符串,用空格替换它们?

例如,对于字符串“not-using-social-media”,我想将其删除为“不使用社交媒体”

对于字符串“16令人惊讶的小企业统计(信息图表)”,我想将其删除为“16令人惊讶的小企业统计信息图”

4 个答案:

答案 0 :(得分:4)

这不使用正则表达式。它用空格替换“a-zA-Z0-9”中的所有内容,然后将空格的运行挤压到一个空格并删除尾随和尾随空格。

str = "not-using-social-media 16 Surprising Small Business Statistics (Infographic)"
p str.tr("^a-zA-Z0-9 ", " ").squeeze(" ").strip
#=>"not using social media 16 Surprising Small Business Statistics Infographic"

答案 1 :(得分:1)

我会这样做:

phrase = '16 Surprising Small Business Statistics (Infographic)'

p phrase.gsub(/[^a-zA-Z0-9]+/, ' ').strip
#=> "16 Surprising Small Business Statistics Infographic"

p phrase.gsub(/[^[:alnum:]]+/, ' ').strip
#=> "16 Surprising Small Business Statistics Infographic"

几点说明:

  • 添加+,以便用一个空格替换连续的非字母数字字符。
  • 假设您不希望创建前导/尾随空格,则会添加.strip
  • 正则表达式不使用\w,因为它也会包含下划线。

答案 2 :(得分:0)

正则表达式是你的朋友 - http://www.ruby-doc.org/core-1.9.3/Regexp.html

这是你想要的括号表达式 - / [[:alpha:]] /

答案 3 :(得分:0)

最简单的解决方案就是使用delete('^')。 它会删除^之后的所有内容。

a='hello-world+'

a.delete('^A-Za-z')  #=> 'helloworld'

a='Hello +World'

a.delete('^A-Za-z ') #=> 'Hello World'

a='01234 ABC'
a.delete('^0-9') #=> '01234'