Подтвердить что ты не робот

Как получить все цифры из строки regexp ruby

Как получить все цифры из строки предложения, например, "Lorem 123 ipsum 456 879" = > "123456879" с использованием регулярного выражения в рубине?

4b9b3361

Ответ 1

Просто замените все остальное.

result = subject.gsub(/[^\d]/, '')

Ответ 2

Без регулярного выражения:

"Lorem 123 ipsum 456 879".delete('^0-9') #=>"123456879"

Ответ 3

Ref this

result = subject.gsub(/\D/, '')  

Ответ 4

"Lorem 123 ipsum 456 879".scan(/\d+/).join # => "123456879"

Ответ 5

Версия от @steenslag - самая быстрая, спасибо!

require 'benchmark'

class ExtractInt
  def self.v1(string)
    string.gsub(/[^\d]/, '')
  end

  def self.v2(string)
    string.gsub(/\D/, '') 
  end


  def self.v3(string)
    string.delete('^0-9')
  end

  def self.run(m, arg)
    10000.times do 
      self.send(m, arg)
    end
  end
end


Benchmark.bmbm do |x|
  x.report('v1') { ExtractInt.run(:v1, 'AAAA4000') }
  x.report('v2') { ExtractInt.run(:v2, 'AAAA4000') }
  x.report('v3') { ExtractInt.run(:v3, 'AAAA4000') }
end


# Rehearsal --------------------------------------
# v1   0.040000   0.000000   0.040000 (  0.041564)
# v2   0.040000   0.000000   0.040000 (  0.042386)
# v3   0.010000   0.000000   0.010000 (  0.011604)
# ----------------------------- total: 0.090000sec

#          user     system      total        real
# v1   0.040000   0.000000   0.040000 (  0.042176)
# v2   0.040000   0.000000   0.040000 (  0.043753)
# v3   0.010000   0.000000   0.010000 (  0.012960)

Ответ 6

Некоторые правильные ответы уже заданы, что, вероятно, включает в себя то, что вы хотите использовать. Немного более низкий уровень:

"Lorem 123 ipsum 456 879".chars.select {|c| c =~ /\d/}.join

Ответ 7

Я всегда думал, что использование скобок было проще читать

"nwa240".chars.select {|s| s =~ /[0-9]/}