2009-10-08 18 views
16

Por ejemplo, si escribí "ds.35bdg56" la función devolvería 35. ¿Hay alguna función preestablecida para algo así o necesito iterar a través de la cadena, encontrar el primer número y ver cuánto tiempo pasa? y luego devolver eso?(Ruby) ¿Hay una función para encontrar fácilmente el primer número en una cadena?

+1

Lo que debería " ds.-35bdg56 'resolver a? ¿O puede eso simplemente no suceder ... – DigitalRoss

+0

debería resolverse a 35 (sin negativos) – sepiroth

+1

enteros solamente, o deberían puntos decimales ser compatibles (es decir, ¿debería "ab3.5cd" devolver 3 o 3.5?) –

Respuesta

21
>> 'ds.35bdg56'[/\d+/] 
=> "35" 

O bien, como lo pide una función ...

$ irb 
>> def f x; x[/\d+/] end 
=> nil 
>> f 'ds.35bdg56' 
=> "35" 

Usted podría pasar un buen rato con esto:

>> class String; def firstNumber; self[/\d+/]; end; end 
=> nil 
>> 'ds.35bdg56'.firstNumber 
=> "35" 
+0

Esto funciona, pero implica mucho más tipeo humano y procesamiento de computadora de lo necesario. ¡Es mucho más fácil obtener lo que quieres que reemplazar todo lo que no quieres! –

+0

Ok, actualizado. Buena sugerencia. – DigitalRoss

4
text = "ds.35bdg56" 
x = /\d+/.match(text) 
puts x #will return 35 (i hope this helps) 
+0

Más limpio que las otras soluciones. Si lo quiere como un número entero, necesitará '/ \ d + /. Match (texto) [0] .to_i'. –

+0

o si quiere una cadena, agregue '.to_s'. Como es, devuelve un objeto * MatchData *. – DigitalRoss

+0

x será la cadena '" 35 "' si desea el valor entero, intente 'x.to_i' – rampion

3
text[/\d+/].to_i 
Cuestiones relacionadas