2013-04-09 4 views
10

मेरे पास एक स्ट्रिंग है जिसे मैं स्ट्रिंग को शब्दों की सरणी में विभाजित करने के लिए .split ('') का उपयोग कर रहा हूं। क्या मैं स्ट्रिंग को दो शब्दों की सरणी में विभाजित करने के लिए एक समान विधि का उपयोग कर सकता हूं?मैं स्ट्रिंग को एकाधिक शब्दों की सरणी में कैसे विभाजित करूं?

एक सरणी देता है जहां प्रत्येक तत्व एक शब्द है:

words = string.split(' ') 

मैं एक सरणी प्रत्येक तत्व का 2 शब्द के बजाय है वापस जाने के लिए देख रहा हूँ।

+0

कैसे आप एक अजीब का इलाज करना चाहते हैं शब्दों की संख्या? अंतिम शब्द छोड़ दो? पहला शब्द छोड़ दो? इसे रखें? –

+0

संभव डुप्लिकेट [रूबी में निर्दिष्ट आकार के उप सरणी में सरणी विभाजित करने की आवश्यकता] (http://stackoverflow.com/questions/3864139/need-to-split-arrays-to-sub-arrays-of- निर्दिष्ट- आकार -इन-रूबी) –

+1

मार्कथोमास ने आपको –

उत्तर

7
str = 'one two three four five six seven' 
str.split.each_slice(2).map{|a|a.join ' '} 
=> ["one two", "three four", "five six", "seven"] 

यह भी शब्दों का एक विषम संख्या के मामले संभालती है।

+0

मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं इसे 'str.split.each_slice (2) .map (&: join) जैसे कुछ कैसे कम कर सकता हूं, लेकिन मुझे' शामिल 'पर' '' तर्क नहीं मिल रहा है। । –

+0

जो: एक अलग सवाल खोलना बेहतर है। संकेत: नहीं: और इसके बजाय इनलाइन {| t | t.join ('')} –

+1

टिप्पणी @SimonB के लिए धन्यवाद। लेकिन टिप्पणी मेरे अपने उत्तर के बारे में ज्यादातर खुद की टिप्पणी थी। जवाब पहले से ही आपके संकेत को दर्शाता है, मैं इसे और अधिक बनाने की कोशिश कर रहा था। –

3

कुछ इस तरह काम करना चाहिए:

string.scan(/\w+ \w+/) 
+0

'str =' one1 भी प्रश्न पढ़ा था! दो 2 @ तीन3 # चार4 $ पांच5% छः 6^'आउटपुट' [] '। मुझे नहीं पता कि शब्द सभी वर्णमाला –

+1

हैं शायद 'string.scan (/ \ S + \ S + /)' बेहतर होगा। – oldergod

+0

यह भी अनुत्तरित है कि शब्दों की एक विषम संख्या कैसे चलाना है। मुझे नही पता। –

4

आप

string= 'one1! [email protected] three3# four4$ five5% six6^ sev' 
string.scan(/\S+ ?\S*/) 
# => ["one1! [email protected]", "three3# four4$", "five5% six6^", "sev"] 
+0

नहीं यदि अंतिम शब्द एक वर्ण है। –

+0

@ जोफ्रामबैक धन्यवाद, निश्चित। – oldergod

+1

क्या आप '?' '' S '' के साथ बदलते हैं, फिर यह शब्दों के बीच मूल सफेद जगह को भी सुरक्षित रखेगा। –

2

रूबी के scan इस के लिए उपयोगी है कर सकते हैं:

'a b c'.scan(/\w+(?:\s+\w+)?/) 
=> ["a b", "c"] 

'a b c d e f g'.scan(/\w+(?:\s+\w+)?/) 
=> ["a b", "c d", "e f", "g"] 
2

यह सब मैं करना पड़ा है:

def first_word 
    chat = "I love Ruby" 
    chat = chat.split(" ") 
    chat[0] 
end 
संबंधित मुद्दे