2012-10-12 12 views
18

मैं केवल एक स्ट्रिंग को विभाजित करना चाहता हूं जहां कम से कम दो या अधिक सफेद स्थान हैं।पायथन कम से कम 2 सफेद जगहों के साथ एक स्ट्रिंग को विभाजित करें

उदाहरण के लिए

str = '10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide -1  -1' 
print str.split() 

परिणाम:

['10DEUTSCH', 'GGS', 'Neue', 'Heide', '25-27', 'Wahn-Heide', '-1', '-1'] 

मैं इसे चाहते हैं इस तरह देखने के लिए:

['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1'] 

उत्तर

35
In [4]: import re  
In [5]: text = '10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide -1  -1' 
In [7]: re.split(r'\s{2,}', text) 
Out[7]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1'] 
+1

रेगेक्स का उपयोग करने की कोई आवश्यकता नहीं है बस 'str.split (' ')'। यह भी ध्यान रखें कि str का उपयोग कर वैरिएबल नाम अंतर्निहित स्ट्र प्रकार की वजह से एक बुरी चीज है। – Wessie

+3

@ वेस्सी: 'text.split ('') 'बहुत खाली स्ट्रिंग का उत्पादन करेगा क्योंकि रिक्त स्थान की संख्या अक्सर 2 से अधिक होती है। – unutbu

+0

' str.split (' ')' परिणाम '[' 10DEUTSCH ',' ' , '', '', 'जीजीएस नियू हेइड 25-27', '', 'वहन-हाइड', '-1', '', '', '-1'] '। रेगेक्स "2 ** या अधिक ** व्हाइटस्पेस" पर विभाजित करने का एक अच्छा तरीका है। – dokkaebi

7

के रूप में बताया गया है, str नहीं है आपकी स्ट्रिंग के लिए एक अच्छा नाम, एस बजाय words का उपयोग कर ओ: - दो रिक्त स्थान के साथ -

output = [s.strip() for s in words.split(' ') if s] 

.split ('') आप एक सूची है कि रिक्त स्ट्रिंग, और अनुगामी/प्रमुख सफेद स्थान के साथ आइटम शामिल दे देंगे। सूची की सूची उस सूची के माध्यम से पुनरावृत्ति करती है, किसी भी गैर-खाली आइटम (if s) रखती है, और .strip() किसी भी अग्रणी/पिछली सफेद जगह का ख्याल रखती है।

+1

मुझे लगता है कि आपको '-1" ('अश्विनी के समाधान देखें) – DSM

4
In [30]: strs='10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide -1  -1' 

In [38]: filter(None, strs.split(" ")) 

Out[38]: ['10DEUTSCH', 'GGS Neue Heide 25-27', ' Wahn-Heide', ' -1', '-1'] 

In [32]: map(str.strip, filter(None, strs.split(" "))) 

Out[32]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1'] 
+1

को रोकने के लिए वहां' .strip() 'को फेंकने की भी आवश्यकता होगी। आप 'फ़िल्टर (कोई नहीं, ...)' या 'फ़िल्टर' का उपयोग कर सकते हैं (बूल, ...) 'लम्बाडा' की बजाय। – DSM

+0

'मानचित्र' और 'फ़िल्टर' फ़ंक्शंस को प्राथमिकता नहीं दी जाती है। सूची समझ का उपयोग करने का प्रयास करें। –

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