2011-11-05 12 views
19

से सभी अंक कैसे "में प्रकाशित किया 123 456 879 ipsum" => "123,456,879" माणिक में regexp का उपयोग कर की तरह एक वाक्य स्ट्रिंग से सभी अंक प्राप्त करने के लिए प्राप्त करने के लिए?कैसे स्ट्रिंग regexp माणिक

उत्तर

43

बस बाकी सब कुछ बदलें।

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

तुम भी के लिए \ डी इस्तेमाल कर सकते हैं [^ \ d] ...> "में प्रकाशित किया 123 ipsum 456 879" .gsub (/ \ डी /, '') => "123,456,879" – oylenshpeegul

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

कुछ सही जवाब पहले ही दिया है, जो शायद शामिल क्या आप उपयोग करना चाहते। एक से थोड़ा अधिक निम्न स्तर के रास्ते:

"Lorem 123 ipsum 456 879".chars.select {|c| c =~ /\d/}.join 
7
regex बिना

:

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

मैं हमेशा कोष्ठक बात का उपयोग कर सोचा

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

पढ़ने के लिए संस्करण आसान था से @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)