Подтвердить что ты не робот

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

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

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

Чтобы извлечь числа из строк, например:

ABCD1234
ABCD1235
ABCD1236

и т.д..

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

Мой код:

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

Ответ 1

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

Ответ 2

Существует много способов Ruby по 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/, '')

Попробуйте каждую консоль.

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

Ответ 3

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

line.scan(/\d+/).first

Ответ 4

Другим решением может быть запись:

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

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

Ответ 5

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

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

Ответ 6

Чтобы извлечь номер из строки, используйте следующее:

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

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