我正在使用此代码:
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]
}
答案 0 :(得分:140)
根据http://www.ruby-forum.com/topic/125709
,有许多Ruby方法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/, '')
在你的控制台上试试。
同时检查该帖子中的基准报告。
答案 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"