Извлечь номер из строки в Ruby - PullRequest
62 голосов
/ 15 апреля 2010

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

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] 
}

Ответы [ 6 ]

145 голосов
/ 12 октября 2012

Есть много способов Ruby согласно 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/, '')

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

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

54 голосов
/ 05 октября 2012

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

line.scan(/\d+/).first
29 голосов
/ 15 апреля 2010
a.map {|x| x[/\d+/]}
4 голосов
/ 25 августа 2015
your_input = "abc1cd2"
your_input.split(//).map {|x| x[/\d+/]}.compact.join("").to_i

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

2 голосов
/ 14 мая 2013

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

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

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

1 голос
/ 19 ноября 2015

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

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

Возвращается 1234

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...