2013-06-04 7 views
6

पायथन में, मैं या तो एक जगह या एक हाइफ़न पर कैसे विभाजित करूं?पायथन: या तो एक जगह या एक हाइफ़न पर विभाजित?

इनपुट:

You think we did this un-thinkingly? 

वांछित उत्पादन:

["You", "think", "we", "did", "this", "un", "thinkingly"] 

मैं जहाँ तक

mystr.split(' ') 

के रूप में प्राप्त कर सकते हैं लेकिन मैं नहीं जानता कि हाइफ़न पर विभाजित करने के लिए कैसे के साथ-साथ रिक्त स्थान and the Python definition of split only seems to specify a string। क्या मुझे रेगेक्स का उपयोग करने की ज़रूरत है?

उत्तर

12

अपने पैटर्न काफी सरल एक (या शायद दो) replace, इसका इस्तेमाल के लिए है :

mystr.replace('-', ' ').split(' ') 

अन्यथा, @jamylak द्वारा सुझाए गए अनुसार आरई का उपयोग करें।

14
>>> import re 
>>> text = "You think we did this un-thinkingly?" 
>>> re.split(r'\s|-', text) 
['You', 'think', 'we', 'did', 'this', 'un', 'thinkingly?'] 

@larsmans बताया गया है, एक से अधिक रिक्त स्थान से विभाजित करने के लिए के रूप में/हाइफ़न (कोई तर्क के साथ .split() नकल) पठनीयता के लिए [...] प्रयोग किया है:

>>> re.split(r'[\s-]+', text) 
['You', 'think', 'we', 'did', 'this', 'un', 'thinkingly?'] 

regex के बिना (regex इस मामले में सबसे सरल विकल्प है):

>>> [y for x in text.split() for y in x.split('-')] 
['You', 'think', 'we', 'did', 'this', 'un', 'thinkingly?'] 

असल @Elazar द्वारा जवाब regex के बिना के साथ-साथ काफी सरल है (मैं अभी भी रेगे की पुष्टि करेंगे हालांकि एक्स)

+0

मुझे लगता है कि रेगेक्स सामान्य मामले (किसी भी हाइफ़न, कहें) के लिए बेहतर है जहां 'प्रतिस्थापन' सरल मामलों के लिए बेहतर है। – Elazar

+0

और मेरा सुझाव है कि आप मेरा जवाब अपने में एम्बेड करेंगे, और मैं इसे हटा दूंगा। तो पाठक को एक पूरी तस्वीर मिल जाएगी। – Elazar

+0

@ एलाजार हां 'प्रतिस्थापन' एक से अधिक के बाद गन्दा हो सकता है, हालांकि यह पूरी तरह से यहां काम करता है। मैं आपका जवाब एम्बेड नहीं करना चाहता, आप – jamylak

1

एक regex दूर आसान और बेहतर है, लेकिन आप कर रहे हैं के प्रति पूर्ण निष्ठा से एक का उपयोग करने का विरोध किया:

import itertools 

itertools.chain.from_iterable((i.split(" ") for i in myStr.split("-"))) 
संबंधित मुद्दे