在Ruby中从string中提取数字

我正在使用这个代码:

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

从string中提取数字,如:

 ABCD1234 ABCD1235 ABCD1236 

等等

它的工作原理,但我不知道还有什么其他的select,我必须在Ruby?

我的代码:

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

根据http://www.ruby-forum.com/topic/125709有许多Ruby方法;

  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/, '')

尝试每个你的控制台。

还要检查该post中的基准报告。

还有更简单的解决scheme

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

另一个解决scheme可能是写:

 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. 

现在,如果你input

 myNumber = myString.to_i #or myString.to_f 

这应该返回一个

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

这应该工作。

要从string中提取数字部分,请使用以下命令:

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

它应该返回1234