从Ruby中的字符串中提取数字

时间:2010-04-14 20:31:31

标签: 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] 
}

7 个答案:

答案 0 :(得分:140)

根据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/, '')
  8. 在你的控制台上试试。

    同时检查该帖子中的基准报告。

答案 1 :(得分:52)

甚至还有更简单的解决方案

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

答案 2 :(得分:27)

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

答案 3 :(得分:3)

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

这应该有用。

答案 4 :(得分:2)

另一种解决方案可能是写:

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 :(得分:1)

要从字符串中提取数字部分,请使用以下内容:

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

它应该返回1234

答案 6 :(得分:0)

最简单,最快的方法是从字符串中获取所有整数。

str = 'abc123def456'

str.delete("^0-9")
=> "123456"