scan - Extraer el número de la cadena en Ruby
scan ruby example (6)
Estoy usando este código:
s = line.match( /ABCD(/d{4})/ ).values_at( 1 )[0]
Para extraer números de cadenas como:
ABCD1234
ABCD1235
ABCD1236
etc.
Funciona, pero me pregunto qué otra alternativa tengo para esto en Ruby.
Mi código:
ids = []
someBigString.lines.each {|line|
ids << line.match( /ABCD(/d{4})/ ).values_at( 1 )[0]
}
Hay muchas formas de Ruby según http://www.ruby-forum.com/topic/125709
-
line.scan(//d/).join('''')
-
line.gsub(/[^0-9]/, '''')
-
line.gsub(/[^/d]/, '''')
-
line.tr("^0-9", '''')
-
line.delete("^0-9")
-
line.split(/[^/d]/).join
-
line.gsub(//D/, '''')
Pruebe cada uno en su consola.
También puedes ver el informe de referencia en esa publicación.
Otra solución puede ser escribir:
myString = "sami103"
myString.each_char{ |c| myString.delete!(c) if c.ord<48 or c.ord>57 } #In this case, we are deleting all characters that do not represent numbers.
Ahora, si escribes
myNumber = myString.to_i #or myString.to_f
Esto debería devolver un
Para extraer parte de un número de una cadena usa lo siguiente:
str = ''abcd1234''
//d+/.match(str).try(:[], 0)
Debe devolver 1234
hay incluso una solución más simple
line.scan(//d+/).first
a.map {|x| x[//d+/]}
your_input = "abc1cd2"
your_input.split(//).map {|x| x[//d+/]}.compact.join("").to_i
Esto debería funcionar.