यह (?:...)
का मतलब गैर-कैप्चरिंग समूहिंग कोष्ठक का एक सेट है।
आम तौर पर, जब आप रेगेक्स में (...)
लिखते हैं, तो यह मेल खाने वाली सामग्री को 'कैप्चर करता है'। जब आप गैर-कैप्चरिंग संस्करण का उपयोग करते हैं, तो यह कैप्चर नहीं करता है।
किसी विशेष स्ट्रिंग के खिलाफ रेगेक्स मैचों के बाद re
पैकेज में विधियों का उपयोग करके आप regex द्वारा मिलान किए गए विभिन्न हिस्सों में प्राप्त कर सकते हैं।
कैसे इस रेगुलर एक्सप्रेशन मिलान मैक पता "00: 07: 32: 12: एसी: डी: एफई"?
यह आपके द्वारा शुरू में पूछा गया एक अलग सवाल है। हालांकि, regex हिस्सा है:
([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5})
कोष्ठकों की सबसे बाहरी जोड़ी पर कब्जा कर रहे हैं कोष्ठकों; जब आप एक स्ट्रिंग के खिलाफ regex का सफलतापूर्वक उपयोग करते हैं तो वे क्या घूमते हैं।
[\dA-Fa-f]{2}
हिस्सा एक अंकों (\d
) या हेक्साडेसिमल अंक A-Fa-f]
, एक जोड़ी {2}
में, एक गैर कैप्चरिंग समूहीकरण जहां मिलान किया सामग्री एक कॉलन या डैश (:
या -
) है जिसके बाद एक और जोड़ी के बाद से मेल खाता है हेक्स अंकों के, पूरे 5 बार बार बार दोहराया।
p = re.compile(([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5}))
m = p.match("00:07:32:12:ac:de:ef")
if m:
m.group(1)
अंतिम पंक्ति स्ट्रिंग प्रिंट चाहिए "00: 07: 32: 12: एसी: डी" क्योंकि है कि पहली स्ट्रिंग में कुल में हेक्स अंक के 6 जोड़े (सात जोड़े से बाहर का सेट है)। वास्तव में, बाहरी समूहबद्ध कोष्ठक अनावश्यक हैं और यदि छोड़े गए हैं, m.group(0)
काम करेगा (यह उनके साथ भी काम करता है)। आप 7 जोड़े मिलान करने के लिए की जरूरत है, तो आप एक 6. में 5 बदलने आप उन्हें अस्वीकार करने के लिए की जरूरत है, तो आप regex में लंगर डाल चाहते हैं:
p = re.compile(^([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5})$)
कैरट ^
स्ट्रिंग की शुरुआत से मेल खाता है; डॉलर $
स्ट्रिंग के अंत से मेल खाता है। 5 के साथ, यह आपकी नमूना स्ट्रिंग से मेल नहीं खाएगा। 5 की जगह 6 के साथ, यह आपकी स्ट्रिंग से मेल खाएगा।
धन्यवाद लेकिन यह नियमित अभिव्यक्ति मैक पते से कैसे मेल खाता है "00: 07: 32: 12: ac: de: ef" – Hari
@rawb ... यह काम करता है और वह भी एक समूह re.findall इसे एक समूह के रूप में प्रिंट करता है – Hari