2013-07-27 4 views
6

कृपया, मुझे अगले काम के लिए एक regexp के साथ मदद: मैं कुछ तालिका में एक 'कीमत' कॉलम है, लेकिन मूल्यों वहाँ अलग हैं:संख्याओं, "," और "।" को छोड़कर स्ट्रिंग से सभी वर्णों को कैसे हटाएं। रूबी का उपयोग कर?

['1.22','1,22','$1.22','1,22$','$ 1.22'] 

मैं digits और , और छोड़कर हर चरित्र को हटाने की जरूरत .। इसलिए मुझे एक ऐसा मूल्य प्राप्त करने की आवश्यकता है जिसे फ़्लोट के रूप में हमेशा पार्स किया जा सके।

+0

क्या आप की कोशिश की है? अपना प्रश्न पूछने से पहले कुछ दस्तावेज या Google को पढ़ने के लिए सर्वश्रेष्ठ। – stevekohls

+2

आप '1,22' का अर्थ क्या चाहते हैं? – bsd

+0

जो कुछ भी आपने कोड के रूप में लिखा है वह मान्य नहीं है। क्या यह तारों की सरणी है? – sawa

उत्तर

0

आप सभी सफेद स्थान की जगह ले सकता, '$' द्वारा सभी ''

+2

आप रूबी में ऐसा कैसे करेंगे? – likeitlikeit

1

संख्या निकालने के लिए:

a = ["1.22", "1,22", "$1.22", "1,22$", "$ 1.22"] 
a.map {|s| s[/[\d.,]+/] } 
#=> ["1.22", "1,22", "1.22", "1,22", "1.22"] 

मान लिया जाये कि अल्पविराम के , दशमलव अंक . की तरह व्यवहार किया जाना चाहिए ('1,22' में के रूप में ->1.22), यह आपके मान परिवर्तित करना चाहिए फ्लोट करने के लिए:

a = ["1.22", "1,22", "$1.22", "1,22$", "$ 1.22"] 
a.map {|s| s[/[\d.,]+/].gsub(',','.').to_f } 
#=> [1.22, 1.22, 1.22, 1.22, 1.22] 
8

इसे आजमाएं:

yourStr.gsub(/[^0-9,.]/, "") 
+0

यह बहुत उपयोगी था! कोड में लाइन ब्रेक रखने का कोई तरीका है? (मैं एक सीएसवी फ़ाइल को साफ करने के लिए एक प्रोग्राम बनाने की कोशिश कर रहा हूं।) – oliviasteger

+1

@ इंस्पेक्टर एलीमेंट अक्षर की सूची में '\ r' और' \ n' जोड़ें, फिर उन्हें हटाया नहीं जाएगा। – ProgramFOX

10
a.map {|i| i.gsub(/[^\d,\.]/, '')} 
# => ["1.22", "1,22", "1.22", "1,22", "1.22"] 
0

एक और एक:

a= ['1.22','1,22','$1.22','1,22$','$ 1.22'] 
a.map{|i| i[/\d+.\d+/]} 
# => ["1.22", "1,22", "1.22", "1,22", "1.22"] 
संबंधित मुद्दे