Извлечение числа из строки в Ruby


Я использую этот код:

s = line.match( /ABCD(d{4})/ ).values_at( 1 )[0] 

для извлечения чисел из строк, таких как:

ABCD1234
ABCD1235
ABCD1236

etc.

это работает, но мне интересно, какая еще альтернатива у меня есть для этого в Ruby?

мой код:

ids = [] 
someBigString.lines.each {|line|
   ids << line.match( /ABCD(d{4})/ ).values_at( 1 )[0] 
}
6 53

6 ответов:

a.map {|x| x[/\d+/]}

есть много рубиновых способов согласно http://www.ruby-forum.com/topic/125709

  1. line.scan(/\d/).join('')
  2. line.gsub(/[^0-9]/, '')
  3. line.gsub(/[^\d]/, '')
  4. line.tr("^0-9", '')
  5. line.delete("^0-9")
  6. line.split(/[^\d]/).join
  7. line.gsub(/\D/, '')

попробуйте каждый на консоли.

также проверьте контрольный отчет в этом сообщении.

есть еще более простое решение

line.scan(/\d+/).first
your_input = "abc1cd2"
your_input.split(//).map {|x| x[/\d+/]}.compact.join("").to_i

Это должно работать.

другим решением может быть, чтобы написать:

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.

теперь, если вы введете

myNumber = myString.to_i #or myString.to_f

Это должно вернуть a

для извлечения числовой части из строки используйте следующее:

str = 'abcd1234'
/\d+/.match(str).try(:[], 0)

Он должен вернуть 1234