2012-12-20 7 views
14

यहां मामले हैं। मैं लॉग फ़ाइल में निम्न पैटर्न की तलाश में हूं।पायगेन में समूहबद्ध किए बिना Regex और OR ऑपरेटर?

सभी तार AB_N या CDE_N के रूप में हैं। AB और CDE निश्चित अक्षर हैं, इसके बाद अंडरस्कोर। N या तो 2 या 3 संख्या हो सकती है।

मैंने (AB|CDE)_\d{2,3} की कोशिश की लेकिन यह एक समूह लौटाता है। मैं \w{2,3}\d{2,3} नहीं कर सकता क्योंकि यह या तो AB या CDE और AC या FEG नहीं होना चाहिए। कोष्ठक को छोड़ना भी टूट जाता है। मुझे यकीन है कि समाधान सरल है लेकिन मैं अजगर और regex के लिए नया हूँ और इसे समझ नहीं सकता।

+0

आप पूरी चीज को एक समूह में लपेट सकते हैं: '((एबी | सीडीई) _ \ d {2,3}) ', और पहला समूह' AB_123' है और दूसरा सिर्फ' एबी' है। –

उत्तर

28

एक ?: रेगेक्स में एक कंस्ट्रैसिस के अंदर यह गैर-कैप्चरिंग बनाता है। इस तरह: (?:AB|CDE)_\d{2,3}

यहां दस्तावेज़ देखें: http://docs.python.org/3/library/re.html इसके माध्यम से लगभग एक तिहाई रास्ते गैर-कैप्चरिंग वाक्यविन्यास पर चला जाता है।

+0

यह है! शानदार .. धन्यवाद – pedram

3

गैर-कैप्चरिंग समूह वाक्यविन्यास (?:...) है। तो (?:AB|CDE)_\d{2,3} करें। यह सब कुछ के साथ documented है।

+0

यह काम नहीं किया, लेकिन (? एबी | सीडीई) का उपयोग किया। – pedram

+2

ओह, एक टाइपो। लेकिन ऐसा लगता है कि आपने एक भी बनाया है, क्योंकि यह '(?: एबी | सीडीई) होना चाहिए। – BrenBarn

+1

क्या मैं कुछ कर सकता हूं जैसे (?: Abc | def | ghi | xyz) '? – qed

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