मुझे लगता है कि आप "गैर-कैप्चरिंग समूह" की अवधारणा को गलत समझ रहे हैं। गैर-कैप्चरिंग समूह द्वारा मिलान किया गया पाठ अभी भी समग्र रेगेक्स मैच का हिस्सा बन गया है।
दोनों regex (?:aaa)(_bbb)
और regex (aaa)(_bbb)
कुल मिलान के रूप में aaa_bbb
लौटाएं। अंतर यह है कि पहले रेगेक्स में एक कैप्चरिंग समूह है जो _bbb
को अपने मैच के रूप में देता है, जबकि दूसरे रेगेक्स में दो कैप्चरिंग समूह हैं जो aaa
और _bbb
को अपने संबंधित मैचों के रूप में लौटाते हैं। अपने पायथन कोड में, _bbb
प्राप्त करने के लिए, आपको पहले रेगेक्स के साथ group(1)
और group(2)
दूसरे रेगेक्स के साथ उपयोग करने की आवश्यकता होगी।
गैर-कैप्चरिंग समूहों का मुख्य लाभ यह है कि आप रेगेक्स में कैप्चरिंग समूहों की संख्या को परेशान किए बिना उन्हें रेगेक्स में जोड़ सकते हैं। वे (थोड़ा) बेहतर प्रदर्शन भी प्रदान करते हैं क्योंकि रेगेक्स इंजन को गैर-कैप्चरिंग समूहों द्वारा मेल किए गए पाठ का ट्रैक रखने की आवश्यकता नहीं है।
यदि आप वास्तव में कुल रेगेक्स मैच से aaa
को बाहर करना चाहते हैं तो आपको lookaround का उपयोग करने की आवश्यकता है। इस मामले में, सकारात्मक दिखने वाला चाल चलता है: (?<=aaa)_bbb
। इस रेगेक्स के साथ, group()
पायथन में _bbb
लौटाता है। कोई कैप्चरिंग समूहों की आवश्यकता नहीं है।
मेरी सिफारिश यह है कि यदि आपके पास रेगेक्स मैच का हिस्सा पाने के लिए कैप्चरिंग समूहों का उपयोग करने की क्षमता है, तो उस विधि का उपयोग लुकराउंड के बजाय करें।
स्रोत
2010-04-24 03:43:52
ठंडा, संपादन के लिए धन्यवाद, और गैर-कैप्चरिंग समूह –