2011-02-14 6 views
20

पर पायथन स्प्लिट स्ट्रिंग मैं एक नियमित अभिव्यक्ति का उपयोग कर एक स्ट्रिंग को विभाजित करने की कोशिश कर रहा हूं।रीजिक्स

>>> import re 
>>> p = re.compile(r'(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\s*\d{1,2}') 
>>> filter(None, p.split('Friday 1Friday 11 JAN 11')) 
['Friday', 'Friday', ' JAN 11'] 

मैं अपने रेगुलर एक्सप्रेशन के साथ गलत क्या कर रहा हूँ:

Friday 1Friday 11 JAN 11 

उत्पादन मैं हासिल करना चाहते हैं

['Friday 1', 'Friday 11', ' JAN 11'] 

मेरे टुकड़ा अब तक वांछित परिणाम नहीं दे रहा है?

उत्तर

23

समस्या कैप्चरिंग कोष्ठक है। यह वाक्यविन्यास: (?:...) उन्हें गैर-कैप्चरिंग बनाता है। आज़माएं:

p = re.compile(r'((?:Friday|Saturday)\s*\d{1,2})') 
+0

वही है जो मैं बाद में था! मुझे पता था कि यह कुछ छोटा था। धन्यवाद –

+0

मैं पी = re.compile (आर '((शुक्रवार | शनिवार) \ s * \ d {1,2})' के साथ बंद हो रहा था) लेकिन मुझे समझ में नहीं आया कि मुझे प्रत्येक समूह के लिए 2 परिणाम क्यों मिल रहे थे। हालांकि अब पूरी समझ में आता है, यह परिणाम का उत्पादन कर रहा था + समूह का नाम वापस संदर्भ। –

5

आप 're.findall' फ़ंक्शन का भी उपयोग कर सकते हैं।

\>>> val 
'Friday 1Friday 11 JAN 11 ' 
\>>> pat = re.compile(r'(\w+\s*\d*)') 
\>>> m=re.findall(pat,val) 
\>>> m 
['Friday 1', 'Friday 11', 'JAN 11'] 
संबंधित मुद्दे