2009-10-08 9 views
16

उदाहरण के लिए, यदि मैंने "ds.35bdg56" टाइप किया है तो फ़ंक्शन 35 वापस आ जाएगा। क्या ऐसा कुछ करने के लिए पूर्व-निर्मित फ़ंक्शन है या मुझे स्ट्रिंग के माध्यम से पुनरावृत्ति करने की आवश्यकता है, पहले नंबर को ढूंढें और देखें कि यह कितना समय लगता है और फिर वह वापस आओ?(रूबी) क्या स्ट्रिंग में पहले नंबर को आसानी से ढूंढने के लिए कोई फ़ंक्शन है?

+1

क्या करना चाहिए ' ds.-35bdg56 'हल करने के लिए? या क्या यह नहीं हो सकता है ... – DigitalRoss

+0

को 35 (कोई नकारात्मक नहीं) – sepiroth

+1

केवल इंटीग्रर्स को हल करना चाहिए, या दशमलव बिंदुओं को समर्थित होना चाहिए (यानी "ab3.5cd" वापसी 3 या 3.5?) –

उत्तर

21
>> 'ds.35bdg56'[/\d+/] 
=> "35" 

या, जब से तुम एक समारोह के लिए पूछना था ...

$ irb 
>> def f x; x[/\d+/] end 
=> nil 
>> f 'ds.35bdg56' 
=> "35" 

आप वास्तव में इस के साथ कुछ मज़ा हो सकता है:

>> class String; def firstNumber; self[/\d+/]; end; end 
=> nil 
>> 'ds.35bdg56'.firstNumber 
=> "35" 
+0

यह काम करता है, लेकिन इसमें रास्ता शामिल है आवश्यक से अधिक मानव टाइपिंग और कंप्यूटर प्रसंस्करण। आप जिस चीज को नहीं चाहते हैं उसे प्रतिस्थापित करने के बजाय इच्छित चीज को बाहर निकालना बहुत आसान है! –

+0

ठीक है, अद्यतन किया गया। अच्छा सुझाव। – DigitalRoss

4
text = "ds.35bdg56" 
x = /\d+/.match(text) 
puts x #will return 35 (i hope this helps) 
+0

अन्य समाधानों की तुलना में क्लीनर। यदि आप इसे पूर्णांक के रूप में चाहते हैं, तो आपको '/ \ d + /। मिलान (टेक्स्ट) [0] .to_i' की आवश्यकता होगी। –

+0

या यदि आप एक स्ट्रिंग चाहते हैं, तो '.to_s' जोड़ें। जैसा कि, यह एक * MatchData * ऑब्जेक्ट देता है। – DigitalRoss

+0

x स्ट्रिंग '35" होगा यदि आप पूर्णांक मान चाहते हैं, तो 'x.to_i' – rampion

संबंधित मुद्दे

 संबंधित मुद्दे