2012-07-10 11 views
5

वहाँ kindof एक tokenizer/विभाजक की तरह कार्य समूहों और * नियमित अभिव्यक्ति की सुविधाओं गठबंधन करने के लिए कोई तरीका है। मैं इस की कोशिश की: मेरे समूहोंरेगेक्स समूह और * वाइल्डकार्ड एक साथ काम कर सकते हैं?

my_str = "foofoofoofoo" 
pattern = "(foo)*" 
result = re.search(pattern, my_str) 

मुझे उम्मीद थी की तरह

("foo", "foo", "foo", "foo") 

लग सकता है लेकिन ऐसा नहीं है। मैं इससे आश्चर्यचकित था क्योंकि? और समूह की विशेषताएं एक साथ काम करती हैं:

my_str= "Mr foo" 
pattern = "(Mr)? foo" 
result = re.search(pattern, my_str) 
+3

मुझे शक है कि काम करेंगे है, लेकिन आप क्या आप 're.findall का उपयोग कर चाहते हैं प्राप्त कर सकते हैं (" foo "," foofoofoofoo ")'। ओह, और कृपया एक चर नाम के रूप में 'str' का उपयोग न करें। –

+0

मैंने 'str' को 'my_str' में बदल दिया है क्योंकि' str' अंतर्निहित छाया है। – jamylak

+0

हाँ हा माफ करना, str सिर्फ एक उदाहरण था। वह कोड शायद वाक्य रचनात्मक रूप से सही नहीं है। इसके अलावा, मैंने निष्कर्ष विधि देखी और यह निश्चित रूप से काम करेगा। मैं एक और सामान्य अर्थ में उत्सुक था। –

उत्तर

4

समस्या है, आप अपना एकमात्र कैप्चरिंग समूह दोहराते हैं। इसका मतलब है कि आपके पास केवल एक ब्रैकेट ==> एक कैप्चरिंग समूह है, और यह कैप्चरिंग समूह प्रत्येक बार मेल खाने पर ओवरराइट किया जाता है।

अधिक जानकारी के लिए नियमित-expression.info पर Repeating a Capturing Group vs. Capturing a Repeated Group देखें। (लेकिन एक दोहराया समूह पर कब्जा भी आप क्या नहीं करना चाहता है)

तो, अपने रेगुलर एक्सप्रेशन से किया जाता है के बाद, अपने कैप्चरिंग समूह 1 पिछले पाया "foo" शामिल होंगे।

यह होगा आप अपेक्षित परिणाम देना होगा:

my_str = "foofoofoofoo" 
pattern = "foo" 
result = re.findall(pattern, my_str) 

परिणाम तो एक सूची ['foo', 'foo', 'foo', 'foo']

+0

+1। धन्यवाद! –

+0

दिलचस्प। धन्यवाद। –

3

समूह कैप्चर करें और * निर्मित मॉड्यूल के साथ काम न करें - इसके बजाय findall का उपयोग करें।

एक पुस्तकालय pypi कि मेरा मानना ​​है कि में regex कहा जाता है कि वाक्य रचना का समर्थन करता है और इस तरह के चर लंबाई के रूप में कुछ अन्य सुविधाओं वापस ट्रैकिंग है।

+0

कि चीजों की व्याख्या करता है। धन्यवाद। बहुत उपयोगी लिंक के लिए –

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