2012-03-06 7 views
11

मुझे एक स्ट्रिंग को दो चरों में विभाजित करने की आवश्यकता है। उदाहरण के लिए, निम्नलिखित ठीक काम करेगा:पीछे की जगह को अवशोषित करने वाली अल्पविराम द्वारा रूबी विभाजित

first,second = "red,blue".split(',') 

मैं उपयोगकर्ता इनपुट, जो अल्पविराम के बाद अतिरिक्त स्थान हो सकता है विभाजित करना चाहते हैं। अल्पविराम अवशोषित होने के बाद मैं इसे कैसे लिखूं? मुझे इन सभी संभावनाओं को सही ढंग से संभालने की ज़रूरत है:

"red,blue"  # first="red" second="blue" 
"red, blue"  # first="red" second="blue" 
"red,dark blue" # first="red" second="dark blue" 
"red, light blue" # first="red" second="light blue" 

उत्तर

27

केवल परिणामी प्रविष्टियों को ट्रिम करें। जिस तरह से आप ऐसा करते हैं, इस पर निर्भर करता है कि क्या आप अल्पविराम के बाद एक ही स्थान का समर्थन करना चाहते हैं, या फिर आप सभी प्रमुख व्हाइटस्पेस को हटा देना चाहते हैं (और शायद पीछे की जगह का पीछा करना भी)। यदि आपका लक्ष्य शब्दों को प्राप्त करना है, जैसे यह आपके नमूने की तरह दिखता है, तो आपको बस आसपास के सफेद जगहों को हटा देना चाहिए।

first,second = "red, blue".split(',').map(&:strip) 
+0

बेशक, यह एक बेहतर विकल्प है। धन्यवाद! – Andrew

11

आपके कोड में कोई regexp नहीं है - आप एक स्ट्रिंग का उपयोग करके विभाजित होते हैं, जो एक फर्क पड़ता है। "red,blue".split(/\s*,\s*/) आपको अपेक्षा के अनुसार काम करना चाहिए।

+1

हालांकि यह प्रश्न में उल्लिखित उदाहरण नहीं है, यह लाल, नीले रंग के लिए काम नहीं करेगा। –

+0

मुझे पता है कि मेरे उदाहरण में कोई रेगेक्स नहीं है, मेरा उदाहरण कोड दिखाना था जो मैं चाहता हूं लेकिन सभी भिन्नताओं को संभाल नहीं पाता। मैंने कई रेगेक्स विविधताओं की कोशिश की लेकिन वे सभी को पकड़ नहीं लिया। – Andrew

+3

बस कॉमा के सामने एक और \ "डालें:" लाल, नीला ".split (/ \ s *, \ s * /)' –