删除所有非单词字符的简单方法

evf*_*qcg 7 ruby regex

我想用最简单的方法从字符串中删除所有字符.例如,从"a,sd3 31ds""asdds" 我的CAD做这样的事情:

"a,sd3 31ds".gsub(/\W/, "").gsub(/\d/,"")
# => "asdds"
Run Code Online (Sandbox Code Playgroud)

但它看起来有点尴尬.也许有可能将这些rexegs合并为一个?

Tud*_*tin 17

"a,sd3 31ds".gsub(/(\W|\d)/, "")
Run Code Online (Sandbox Code Playgroud)


und*_*gor 12

我会去正则表达式/[\W\d]+/.它可能比例如更快/(\W|\d)/.

require 'benchmark' 

N = 500_000
Regexps = [ "(\\W|\\d)", "(\\W|\\d)+", "(?:\\W|\\d)", "(?:\\W|\\d)+", 
            "\\W|\\d", "[\\W\\d]", "[\\W\\d]+" ]

Benchmark.bm(15) do |x|  
  Regexps.each do | re_str |
    re = Regexp.new(re_str)
    x.report("/#{re_str}/:") { N.times { "a,sd3 31ds".gsub(re, "") }}
  end
end   
Run Code Online (Sandbox Code Playgroud)

给(用ruby 2.0.0p195 [x64-mingw32])

                      user     system      total        real
/(\W|\d)/:        1.950000   0.000000   1.950000 (  1.951437)
/(\W|\d)+/:       1.794000   0.000000   1.794000 (  1.787569)
/(?:\W|\d)/:      1.857000   0.000000   1.857000 (  1.855515)
/(?:\W|\d)+/:     1.638000   0.000000   1.638000 (  1.626698)
/\W|\d/:          1.856000   0.000000   1.856000 (  1.865506)
/[\W\d]/:         1.732000   0.000000   1.732000 (  1.754596)
/[\W\d]+/:        1.622000   0.000000   1.622000 (  1.617705)
Run Code Online (Sandbox Code Playgroud)


Sni*_*sie 5

您可以使用正则表达式"OR"执​​行此操作.

"205h2n0bn  r0".gsub(/\W|\d/, "")
Run Code Online (Sandbox Code Playgroud)

会做的伎俩:)