2011-01-30 16 views
7

मैं इस तरह एक इनपुट स्ट्रिंग है: a1b2c30d40 और मैं स्ट्रिंग के लिए tokenize हैं: a, 1, b, 2, c, 30, d, 40अजगर स्ट्रिंग बंटवारे

मुझे पता है कि मैं प्रत्येक चरित्र को एक-एक करके पढ़ सकता हूं और यह निर्धारित करने के लिए पिछले चरित्र का ट्रैक रख सकता हूं कि मुझे इसे टोकननाइज़ करना चाहिए या नहीं (पंक्ति में 2 अंक का अर्थ यह नहीं है) लेकिन क्या यह एक और पाइथोनिक तरीका है ऐसा करने के लिए?

उत्तर

13
>>> re.split(r'(\d+)', 'a1b2c30d40') 
['a', '1', 'b', '2', 'c', '30', 'd', '40', ''] 

पैटर्न पर: टिप्पणी कहते हैं, \d का अर्थ है "मैच एक अंक", + एक आपरिवर्तक का मतलब है कि "एक या अधिक मेल खाते हैं", इसलिए \d+ का अर्थ है "मैच जितना संभव हो उतना अंक" है। यह एक समूह () में डाल दिया है, इसलिए re.split के संदर्भ में पूरे पैटर्न "विभाजन इस स्ट्रिंग विभाजक के रूप में जितना संभव हो उतना अंकों का उपयोग कर, अतिरिक्त परिणाम में मिलान किया विभाजक पर कब्जा करने" का अर्थ है। यदि आप समूह को छोड़ देंगे, तो आपको ['a', 'b', 'c', 'd', ''] मिल जाएगा।

+0

उम्म मैं बहुत अच्छी तरह से regex समझ में नहीं आता। क्या आप (\ d +) पैटर्न के कुछ स्पष्टीकरण डालने पर ध्यान देते हैं? – Hery

+1

यह संख्याओं/लगातार अंकों पर विभाजित होता है ('\ d' 0-9 है,' + 'एक या अधिक है)। – delnan

+1

http://docs.python.org/library/re.html – Samizdis

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