从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] 
}
OscarRyz asked 2019-10-07T10:59:43Z
6个解决方案
136 votes

根据[http://www.ruby-forum.com/topic/125709],有很多Ruby方式

  1. line.gsub(/\D/, '')
  2. line.gsub(/\D/, '')
  3. line.gsub(/\D/, '')
  4. line.gsub(/\D/, '')
  5. line.gsub(/\D/, '')
  6. line.gsub(/\D/, '')
  7. line.gsub(/\D/, '')

在控制台上尝试每个。

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

Amit Patel answered 2019-10-07T11:00:48Z
48 votes

还有更简单的解决方案

line.scan(/\d+/).first
binarycode answered 2019-10-07T11:01:12Z
27 votes
a.map {|x| x[/\d+/]}
glenn mcdonald answered 2019-10-07T10:59:47Z
3 votes
your_input = "abc1cd2"
your_input.split(//).map {|x| x[/\d+/]}.compact.join("").to_i

这应该工作。

Rohit Patel answered 2019-10-07T11:01:33Z
2 votes

另一个解决方案可能是编写:

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

这应该返回一个

user2380436 answered 2019-10-07T11:02:13Z
1 votes

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

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

它应该返回1234

Rajesh Paul answered 2019-10-07T11:02:44Z
translate from https://stackoverflow.com:/questions/2640819/extract-number-from-string-in-ruby