2012-06-11 23 views
67

पर आधारित स्प्लिट स्ट्रिंग मेरे पास सारणीबद्ध रूप में कमांड का आउटपुट है। मैं परिणाम आउटपुट से इस आउटपुट को पार्स कर रहा हूं और इसे स्ट्रिंग में संग्रहीत कर रहा हूं। एक पंक्ति में प्रत्येक तत्व को एक या अधिक सफेद जगह वर्णों से अलग किया जाता है, इस प्रकार मैं 1 या अधिक रिक्त स्थान से मेल खाने और इसे विभाजित करने के लिए नियमित अभिव्यक्तियों का उपयोग कर रहा हूं। हालांकि, प्रत्येक तत्व के बीच एक स्थान डाला जा रहा है:एक नियमित अभिव्यक्ति

>>> str1="a b  c  d" # spaces are irregular 
>>> str1 
'a b  c  d' 
>>> str2=re.split("()+", str1) 
>>> str2 
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!! 

क्या ऐसा करने का कोई बेहतर तरीका है?

प्रत्येक विभाजन str2 सूची में शामिल होने के बाद।

+0

मैंने इस प्रश्न को कम किया। कारण यह है कि जब प्रश्न स्वयं प्रासंगिक होता है तो दिया गया उदाहरण वास्तव में अनुरोधित समाधान की आवश्यकता के लिए पर्याप्त नहीं है। यदि आपके पास शब्दों के ब्लॉक, संख्याओं के ब्लॉक और आप उन्हें विभिन्न चरों में अलग करना चाहते हैं, तो एक रेगेक्स की आवश्यकता होगी। – erikbwork

+0

@erikbwork मैं परिणामस्वरूप स्ट्रिंग 'str2'' – user2763554

+0

में अनचाहे स्पेस आइटम को हटाना चाहता था हाँ और आप इसे' str1.split() 'का उपयोग करके प्राप्त कर सकते हैं। एक regex के लिए कोई ज़रूरत नहीं है। – erikbwork

उत्तर

95

(, ) का उपयोग करके आप समूह पर कब्जा कर रहे हैं, अगर आप बस उन्हें आप निकालना इस समस्या नहीं होगी।

>>> str1 = "a b  c  d" 
>>> re.split(" +", str1) 
['a', 'b', 'c', 'd'] 

हालांकि खाली स्थान के द्वारा आप के लिए यह बंट जाएगा विनिर्दिष्ट किसी सीमांकक के बिना regex, str.split के लिए कोई जरूरत नहीं है। यह इस मामले में सबसे अच्छा तरीका होगा।

>>> str1.split() 
['a', 'b', 'c', 'd'] 

तुम सच में regex आप उपयोग कर सकते हैं चाहता था अगर यह ('\s' खाली स्थान के प्रतिनिधित्व करता है और यह स्पष्ट है):

>>> re.split("\s+", str1) 
['a', 'b', 'c', 'd'] 

या आप सभी गैर-सफ़ेद पात्रों

>>> re.findall(r'\S+',str1) 
['a', 'b', 'c', 'd'] 
+0

धन्यवाद .... सभी तीन उत्तरों काम किया !!! लेकिन कौन सा बेहतर होगा ?? – user2763554

+3

इसे आसान रखें। 'str.split' निश्चित रूप से सबसे अच्छा है: डी – jamylak

+0

यदि मैं एक स्ट्रिंग है जो स्पेस के साथ शुरू होता है और समाप्त होता है तो मैं इसका उपयोग कैसे कर सकता हूं। उदाहरण: 'ए बी सी डी'। इसके लिए आउटपुट '[' ',' ए ',' बी ',' सी ',' डी ',' '' ' –

5

जब आप re.split का उपयोग करते हैं और विभाजन पैटर्न में कैप्चरिंग समूह होते हैं, तो समूह आउटपुट में बनाए रखा जाता है। यदि आप यह नहीं चाहते हैं, तो इसके बजाय एक गैर-कैप्चरिंग समूह का उपयोग करें।

+0

धन्यवाद .... सभी तीन उत्तरों काम किया !!! लेकिन कौन सा बेहतर होगा ?? – user2763554

+1

'str.split' का उपयोग करना शायद आपके उदाहरण के लिए बेहतर है। मैं सिर्फ यह बताने के लिए चाहता था कि आप जो व्यवहार करते हैं वह आपको क्यों मिलता है। – BrenBarn

13

str.split प्रक्रिया स्वतः ही आइटम के बीच सभी सफेद स्थान को हटा देगा:

>>> str1 = "a b  c  d" 
>>> str1.split() 
['a', 'b', 'c', 'd'] 

डॉक्स यहां हैं: http://docs.python.org/library/stdtypes.html#str.split

+0

धन्यवाद .... सभी तीन उत्तरों काम किया !!! लेकिन कौन सा बेहतर होगा ?? – user2763554

+0

@ गुरुराज्य। .: 'str.split()' शायद इस तरह के प्रकाश-कर्तव्य के रूप में कुछ के लिए सबसे अच्छा विकल्प है। –

1

इसकी बहुत पा सकते हैं वास्तव में सरल। इसे आज़माएं:

str1="a b  c  d" 
splitStr1 = str1.split() 
print splitStr1 
+1

मैं इसे +1 कर दूंगा लेकिन आप बदसूरत अर्ध-कॉलन का उपयोग कर रहे हैं। – jamylak

+3

@jamylak लॉल। मैं उन्हें बदल दूंगा। :) जावा और पायथन का उपयोग करने की आदत! – damned

+0

धन्यवाद .... सभी तीन उत्तरों काम किया !!! लेकिन कौन सा बेहतर होगा ?? – user2763554

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