簡體   English   中英

如何從字符串regexp ruby​​中獲取所有數字

[英]How to get all digits from string regexp ruby

如何使用紅寶石中的regexp獲取句子字符串中的所有數字,如“Lorem 123 ipsum 456 879”=>“123456879”?

只需替換其他一切。

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

沒有正則表達式:

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

參考這個

result = subject.gsub(/\D/, '')  
"Lorem 123 ipsum 456 879".scan(/\d+/).join # => "123456879"

來自@steenslag的版本是最快的,thx!

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)

我一直以為使用括號更容易閱讀

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

已經給出了一些正確的答案,其中可能包括您要使用的內容。 稍微低級的方式:

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

tr()delete性能非常相似!

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

  def self.v4(string)
    string.tr('^0-9', '')
  end

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

安慰:

v3   0.010000   0.000000   0.010000 (  0.005608)
v4   0.010000   0.000000   0.010000 (  0.006141)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM