2012-05-29 8 views
5

नीचे पायथन नियमित अभिव्यक्ति है। ?: में इसका क्या अर्थ है? अभिव्यक्ति समग्र रूप से क्या करती है? यह एक मैक पते जैसे "00:07:32:12:ac:de:ef" से कैसे मेल खाता है?पाइथन नियमित अभिव्यक्ति में "?:" का क्या अर्थ है?

re.compile(([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5}), string) 

उत्तर

7

यह (?:...) का मतलब गैर-कैप्चरिंग समूहिंग कोष्ठक का एक सेट है।

आम तौर पर, जब आप रेगेक्स में (...) लिखते हैं, तो यह मेल खाने वाली सामग्री को 'कैप्चर करता है'। जब आप गैर-कैप्चरिंग संस्करण का उपयोग करते हैं, तो यह कैप्चर नहीं करता है।

किसी विशेष स्ट्रिंग के खिलाफ रेगेक्स मैचों के बाद 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 के साथ, यह आपकी स्ट्रिंग से मेल खाएगा।

+0

धन्यवाद लेकिन यह नियमित अभिव्यक्ति मैक पते से कैसे मेल खाता है "00: 07: 32: 12: ac: de: ef" – Hari

+0

@rawb ... यह काम करता है और वह भी एक समूह re.findall इसे एक समूह के रूप में प्रिंट करता है – Hari

5

?: का उपयोग (?:...) में के रूप में समूह गैर पर कब्जा करने के दौरान की जगह बनाता है। खोजने के दौरान यह कोई समझ नहीं आता है।

आपका रेगुलर एक्सप्रेशन से मतलब है

r""" 
(     # Match the regular expression below and capture its match into backreference number 1 
    [\dA-Fa-f]   # Match a single character present in the list below 
          # A single digit 0..9 
          # A character in the range between “A” and “F” 
          # A character in the range between “a” and “f” 
     {2}     # Exactly 2 times 
    (?:     # Match the regular expression below 
     [:-]    # Match a single character present in the list below 
          # The character “:” 
          # The character “-” 
     [\dA-Fa-f]   # Match a single character present in the list below 
          # A single digit 0..9 
          # A character in the range between “A” and “F” 
          # A character in the range between “a” and “f” 
     {2}     # Exactly 2 times 
    ){5}    # Exactly 5 times 
) 
""" 

आशा इस मदद करता है।

+0

धन्यवाद लेकिन यह नियमित अभिव्यक्ति मैक पते से कैसे मेल खाता है "00: 07: 32: 12: ac: de: ef" – Hari

+0

या यह काम करता है .. धन्यवाद ... लेकिन मुझे जवाब एक समूह के रूप में चाहिए – Hari

+0

आज़माएं यह '' (? है) \ b (?: [ए-एफ 0-9] {2}) (? :: [ए-एफ 0-9] {2}) {6} ''। – Cylian

1

(?:...) का मतलब एक गैर-समूह समूह है। समूह पर कब्जा नहीं किया जाएगा।

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