2011-09-22 14 views

Respuesta

17
"a,sd3 31ds".gsub(/(\W|\d)/, "") 
4

¿Qué hay de

"a,sd3 31ds".gsub(/\W|\d/,"") 

Siempre puede unirse a las expresiones regulares por | expresar una "o".

5

Puede hacer esto con la expresión regular "O".

"205h2n0bn r0".gsub(/\W|\d/, "") 

hará el truco :)

4

Puede probar esta expresión regular:

\P{L} 

no letra Unicode, pero no lo sé, hace Rubí apoyar esta clase.

+0

Ruby 1.9 hace. [enlace] (https://github.com/ruby/ruby/blob/trunk/doc/re.rdoc) – steenslag

+0

@steenslag, genial. Entonces siempre que Regex sea correcto. –

4

una solución no regex:

"a,sd3 31ds".delete('^A-Za-z') 
+0

'" a, sd3 [] 31ds ".delete ('^ A-z')' => '" asd [] ds "' –

+0

@undur_gongor: Ah sí. Lo arreglaré. – steenslag

12

me gustaría ir para la expresión regular /[\W\d]+/. Es potencialmente más rápido que p. Ej. /(\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 

da (con rubí 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) 
Cuestiones relacionadas