Saturday 9 December 2017

अजगर - regex मैचों -5- अंक - विदेशी मुद्रा


पायथन रिगेक्स के बारे में अजगर रेगेक्स कोोडोस 3 से प्रेरित पायथन प्रोग्रामर के लिए एक उपकरण है जो मर चुका है। मैं भी एक छोटा सा तूफान तलाशना चाहता था फेसबुक लैब और वेबसकेट्स द्वारा एसिंन्क अजगर फ्रेमवर्क और पायथन 3 के साथ काम करना शुरू कर रहा हूं। मैं कॉफी्रेस्ट जैसे कुछ लाक्वा अग्रेवे ला मोड राक्को टेक्नोलॉजीज की कोशिश करना चाहता था। पायथन रेगेक्स कॉपीराइट है Rgis FLORET 2013 और बाद में और OpenSource GPL2 लाइसेंस के तहत है। आप गिट हब पर सोर्स कोड प्राप्त कर सकते हैं मुझसे संपर्क संदेश भेजें आपका संदेश सफलतापूर्वक दिया गया था ग्लोबल विकल्प कम टैग पुनः के साथ मूल्यांकन करें I के बजाय re. IGNORECASE Regex विकल्प डिबग मोड (पुनः। डीईबीयूजी) मामले को अनदेखा करें (पुनः। एनआईसीएसीए) डॉट अक्षर (पुनः। DOTALL) वर्बोज बनायें (पुनः। ओवरबोस) अपने नियमित अभिव्यक्ति को संग्रहीत करने के लिए, आपको पंजीकरण करना होगा तुम्हे जो पसंद है। आप या तो आप अपने सोशल नेटवर्क अकाउंट का इस्तेमाल कर सकते हैं या ई-मेल द्वारा रजिस्टर कर सकते हैं। हम कुछ भी करने के लिए कभी भी आपके सामाजिक खाते का उपयोग नहीं करेंगे। 1-क्लिक करें साइनइन टेस्ट ऑनलाइन अपने पायथन रेगुलर एक्सप्रेशन्स रेगुलर एक्सप्रेशन HOWTO यह दस्तावेज़ पुनः मॉड्यूल के साथ पायथन में नियमित अभिव्यक्तियों का उपयोग करने के लिए एक प्रारंभिक ट्यूटोरियल है। यह लाइब्रेरी संदर्भ में संबंधित अनुभाग की तुलना में एक सामान्य परिचय प्रदान करता है। परिचय फिर से मॉड्यूल पायथन 1.5 में जोड़ा गया था, और पर्ल-शैली के नियमित अभिव्यक्ति पैटर्न प्रदान करता है पायथन के पहले के संस्करण रेगेक्स मॉड्यूल के साथ आए थे, जो इमेक्स-शैली पैटर्न प्रदान करता था पायथन 2.5 में रीजेक्स मॉड्यूल पूरी तरह हटा दिया गया था। नियमित अभिव्यक्ति (जिसे आरई, या रेगेक्स या रिजक्स पैटर्न कहा जाता है) अनिवार्य रूप से एक छोटे, उच्च विशेष प्रोग्रामिंग भाषा है जो पायथन के भीतर एम्बेडेड है और पुनः मॉड्यूल के माध्यम से उपलब्ध कराया जाता है। इस छोटी सी भाषा का प्रयोग करके, आप संभावित तारों के सेट के लिए नियम निर्दिष्ट करते हैं जो आप इस सेट से मिलान करना चाहते हैं जिसमें अंग्रेज़ी वाक्यों, या ई-मेल पते, या टेक्स कमांड्स, या जो कुछ भी आप चाहते हैं आप तब पूछ सकते हैं जैसे कि 8220, यह स्ट्रिंग पैटर्न 8221 या 8220 से मेल खाता है, इस स्ट्रिंग 8221 में कहीं भी पैटर्न के लिए एक मैच है। आप एक स्ट्रिंग को संशोधित करने या अलग-अलग तरीकों से अलग करने के लिए आरई का उपयोग भी कर सकते हैं। नियमित अभिव्यक्ति पैटर्न को बाइटटेकोड की एक श्रृंखला में संकलित किया जाता है, जिसे बाद में सी में लिखा गया एक मिलान इंजन द्वारा निष्पादित किया जाता है, उन्नत उपयोग के लिए, यह सावधानीपूर्वक ध्यान देना चाहिए कि इंजन कैसे दिए गए आरई को निष्पादित करेगा और आरई को एक निश्चित रूप से बाइटकोड का निर्माण करने के लिए जो तेजी से चलता है ऑप्टिमाइज़ेशन isn8217t इस दस्तावेज़ में शामिल है, क्योंकि यह आवश्यकता है कि आप मिलान इंजन 8217s internals की अच्छी समझ है नियमित अभिव्यक्ति की भाषा अपेक्षाकृत छोटी है और प्रतिबंधित है, इसलिए सभी संभव स्ट्रिंग प्रसंस्करण कार्य नियमित अभिव्यक्तियों का उपयोग करके किया जा सकता है। ऐसे कार्य भी होते हैं जिन्हें नियमित अभिव्यक्ति के साथ किया जा सकता है, लेकिन अभिव्यक्ति बहुत जटिल हो जाती हैं। इन मामलों में, आप प्रसंस्करण करने के लिए पायथन कोड लिखने से बेहतर हो सकते हैं, जबकि Python कोड एक विस्तृत नियमित अभिव्यक्ति की तुलना में धीमी हो जाएगी, यह भी शायद अधिक समझदार होगा। सरल पैटर्न We8217ll सरलतम संभव नियमित अभिव्यक्तियों के बारे में सीखने से शुरू करते हैं। चूंकि नियमित अभिव्यक्तियां स्ट्रिंग्स पर संचालित करने के लिए उपयोग की जाती हैं, चूंकि we8217ll सबसे सामान्य कार्य से शुरू होते हैं: मेल खाने वाले अक्षर नियमित अभिव्यक्ति (नियतात्मक और गैर निर्धारक परिमित automata) के अंतर्गत कंप्यूटर विज्ञान के विस्तृत विवरण के लिए, आप कम्पाइलर लिखने पर लगभग किसी भी पाठ्यपुस्तक का संदर्भ ले सकते हैं मिलान करने वाले वर्ण अधिकांश अक्षरों और पात्रों को केवल स्वयं का मिलान होगा उदाहरण के लिए, नियमित अभिव्यक्ति परीक्षण स्ट्रिंग परीक्षण से मेल खाएगा। (आप एक केस-असंवेदनशील मोड को सक्षम कर सकते हैं जो इस आरई मैच टेस्ट या टेस्ट को बाद में इस बारे में और भी अधिक बताएगा।) इस नियम के अपवाद कुछ अक्षर विशेष मेटाचार्यक्टर्स हैं। और don8217t खुद मैच इसके बजाय, वे यह संकेत देते हैं कि कुछ असामान्य चीज़ों का मिलान होना चाहिए, या वे उन्हें पुनरावृत्ति या उनके अर्थ को बदलने के द्वारा आरई के अन्य भागों को प्रभावित करते हैं। इस दस्तावेज के अधिकांश विभिन्न metacharacters और वे क्या करते हैं पर चर्चा करने के लिए समर्पित है। यहां 8217 के मेटाचैक्टर्स की पूरी सूची के बारे में इन शब्दों के बाकी हिस्सों पर चर्चा होगी। पहले मेटाचैक्टर्स we8217ll देख रहे हैं और They8217re एक वर्ण वर्ग को निर्दिष्ट करने के लिए उपयोग किया जाता है, जो कि उन वर्णों का एक सेट है जो आप मैच करना चाहते हैं। पात्रों को व्यक्तिगत रूप से सूचीबद्ध किया जा सकता है, या वर्णों की एक श्रेणी को दो अक्षर देकर और उन्हें अलग-अलग करके इंगित किया जा सकता है - उदाहरण के लिए, एबीसी किसी भी एक अक्षर से मेल खाएगा। ख। या सी यह एक-सी के समान है जो वर्णों के समान सेट को व्यक्त करने के लिए एक श्रेणी का उपयोग करता है। यदि आप केवल लोअरकेस अक्षरों से मिलान करना चाहते हैं, तो आपका आरई एक-जेड होगा। Metacharacters कक्षाओं के अंदर सक्रिय नहीं हैं। उदाहरण के लिए, एकेएम किसी भी एक से मेल खाती है। कश्मीर। मीटर। या आमतौर पर एक मेटाचैरैक्टर होता है, लेकिन इसके विशेष प्रकृति के छिपे हुए चरित्र वर्ग 8867 के अंदर। आप सेट के पूरक द्वारा वर्ग के भीतर सूचीबद्ध न होने वाले वर्णों का मिलान कर सकते हैं। यह एक चरित्र वर्ग के बाहर कक्षा के पहले चरित्र के रूप में शामिल करके दर्शाया जाता है, केवल चरित्र से मेल खाएगा। उदाहरण के लिए, 5 5 के अलावा किसी भी चरित्र से मेल खाएगा शायद सबसे महत्वपूर्ण मेटाचर्चर बैकस्लाश है, पायथन स्ट्रिंग लिटरल्स के रूप में, विभिन्न विशेष अनुक्रमों को संकेत देने के लिए बैकस्लैश को विभिन्न वर्णों से अनुसरण किया जा सकता है। यह 8217 भी सभी metacharacters से बचने के लिए इस्तेमाल किया, ताकि आप उन्हें उदाहरण के लिए पैटर्न में मेल कर सकें, अगर आपको मैच की आवश्यकता हो या आप उनके विशेष अर्थ को हटाने के लिए बैकस्लैश के साथ उन्हें पहले से कर सकते हैं: या विशेष रूप से कुछ विशेष अनुक्रम जो कि वर्णों के पूर्वनिर्धारित सेटों का प्रतिनिधित्व करते हैं, जो अक्सर उपयोगी होते हैं, जैसे कि अंकों के सेट, पत्रों का सेट, या किसी भी चीज का सेट जो isn8217t सफेद स्थान है। निम्न पूर्वनिर्धारित विशेष अनुक्रम उन उपलब्धों का सबसेट हैं बराबर वर्ग बाइट स्ट्रिंग पैटर्न के लिए हैं यूनिकोड स्ट्रिंग पैटर्न के लिए अनुक्रमों की विस्तृत सूची और विस्तारित वर्ग की परिभाषा के लिए, नियमित अभिव्यक्ति सिंटेक्स का अंतिम भाग देखें। घ किसी भी दशमलव अंकों से मेल खाता है, यह 0-9 के वर्ग के बराबर है। डी किसी भी गैर अंकों वाले वर्ण से मेल खाता है जो यह 0- 9 के वर्ग के बराबर है। एस किसी भी श्वेत स्थान के चरित्र से मेल खाता है जो यह वर्ग tnrfv के बराबर है। एस किसी गैर-व्हाट्सपेस वर्ण से मेल खाता है जो यह क्लास tnrfv के बराबर है। डब्ल्यू किसी अल्फ़ान्यूमेरिक कैरेक्टर से मेल खाता है जो यह क्लास A-ZA-Z0- 9 के बराबर है। डब्ल्यू किसी गैर-अल्फ़ान्यूमेरिक वर्ण से मेल खाता है जो यह क्लास ए-जेडए - Z0- 9 के बराबर है। ये अनुक्रम एक चरित्र वर्ग के अंदर शामिल किए जा सकते हैं। उदाहरण के लिए,। एक वर्ण वर्ग है जो किसी श्वेत स्थान के चरित्र से मेल खाता होगा, या, या । इस अनुभाग में अंतिम मेटाचैरैक्टर है यह एक नए चरित्र को छोड़कर कुछ भी मेल खाता है, और वहां एक वैकल्पिक मोड (पुनः.डॉटल) के लिए 8217 है जहां यह एक नई लाइन भी मेल करेगा। । अक्सर इसका प्रयोग किया जाता है जहां आप 8220 यानी वर्ण 8221 से मिलान करना चाहते हैं दोहराए जाने वाले चीजों को अलग-अलग वर्णों का मिलान करने में सक्षम होने के नाते पहली बात यह है कि नियमित अभिव्यक्ति ऐसा कर सकती है कि तार पर उपलब्ध तरीकों से संभवतः isn8217t संभव है। हालांकि, यदि यह केवल एक ही अतिरिक्त क्षमता थी, तो वे बहुत ज्यादा अग्रिम के रूप में नहीं लेंगे। एक अन्य क्षमता यह है कि आप निर्दिष्ट कर सकते हैं कि आरई के कुछ भाग को बार-बार दोहराया जाना चाहिए। उन चीजों को दोहराने वाला पहला मेटाचैरैक्टर, जो कि we8217ll को देखता है इसके बजाय शाब्दिक चरित्र से मेल नहीं करता, यह निर्दिष्ट करता है कि पिछले वर्ण को ठीक से एक बार के बजाय शून्य या अधिक बार मिलाया जा सकता है। उदाहरण के लिए, बिल्ली सीटी (0 एक वर्ण), बिल्ली (1 ए), सीएएएटी (3 एक अक्षर) और इसी तरह से मेल खाएगी। आरई इंजन में सी 8217 के इंट प्रकार के आकार से उत्पन्न कई आंतरिक सीमाएं होती हैं जो इसे 2 अरब से अधिक अक्षरों से मेल खाने से रोकती हैं, संभवत: आपको एक ऐसा स्ट्रिंग तैयार करने के लिए पर्याप्त मेमोरी होती है, जिससे आपको उस सीमा में चलना चाहिए। आरई के दोहराते समय पुनरावृत्ति लालची होती है, मेलिंग इंजन संभवतः इसे कई बार दोहराने का प्रयास करेगा। यदि पैटर्न के बाद के हिस्से के don8217t मैच, मिलान इंजन फिर बैक अप लेगा और कम पुनरावृत्तियों के साथ फिर से प्रयास करें। एक कदम-दर-चरण उदाहरण यह स्पष्ट करेगा Let8217s अभिव्यक्ति abcdb पर विचार करें यह पत्र एक से मेल खाता है। कक्षा बीसीडी से शून्य या अधिक अक्षर और अंत में एक बी के साथ समाप्त होता है अब एआरडीसीडी के खिलाफ इस आरई को मिलान करने की कल्पना करें। फिर से कोशिश करो इस बार वर्तमान स्थिति में चरित्र बी है। तो यह सफल होता है आरई का अंत अब तक पहुंच गया है, और इसका एसीसीबी मिलान हुआ है यह दर्शाता है कि मिलान इंजन पहले तक के रूप में चला जाता है, और अगर कोई मैच नहीं पाया जाता तो यह क्रमिक रूप से बैक अप ले लेगा और फिर से आरई के बाकी हिस्सों का दोबारा फिर से प्रयास करेगी। जब तक यह बीसीडी के लिए शून्य मैचों की कोशिश नहीं करता तब तक इसका बैक अप होगा। और यदि वह बाद में असफल हो जाता है, तो इंजन यह निष्कर्ष निकालेगा कि स्ट्रिंग doesn8217t आरई बिल्कुल भी मैच। एक और दोहराए हुए मेटाचारेक्टर है जो एक या अधिक बार से मेल खाता है शून्य या अधिक बार के बीच के अंतर के बारे में सावधानीपूर्वक ध्यान दें और दोबारा दोहराया जा सकता है, जो कम से कम एक घटना की आवश्यकता होती है। इसी तरह के उदाहरण का प्रयोग करने के लिए, बिल्ली बिल्ली (1 ए), सीएएटी (3 ए 8216 एस) से मेल खाती है, लेकिन जीता 8217 टी मैच सीटी। दो और दोहराए जाने वाले क्वालिफायर हैं सवाल चिह्न चरित्र एक बार या शून्य बार से मेल खाता है, आप इसे कुछ वैकल्पिक रूप में चिह्नित करने के रूप में सोच सकते हैं। उदाहरण के लिए, होम-ब्रे, या तो होमब्रे या होम-ब्रे सबसे जटिल दोहराया क्वालीफायर है जहां मी और n दशमलव integers हैं इस क्वालीफायर का मतलब है कि कम से कम मी repetitions होना चाहिए, और अधिकतर n पर। उदाहरण के लिए, एक बी अब से मैच होगा अब। और अब यह 8217t मैच अब तक जीता जिसमें कोई स्लेश नहीं है, या अब जो चार है आप उस मामले में या तो एम या एन को छोड़ सकते हैं, एक उचित मूल्य लापता मूल्य के लिए माना जाता है। ओमेटिंग मी को 0 की निचली सीमा के रूप में परिभाषित किया जाता है, जबकि अन्त्यक्त 8212 के ऊपरी बाउंड में नतीजा निकलना वास्तव में, ऊपरी बाउंड 2 अरब की सीमा पहले उल्लेख की गई है, लेकिन यह भी अनन्तता हो सकता है। कम करने वाले आदमियों के पाठक यह देख सकते हैं कि तीन अन्य क्वालिफायर इस नोटेशन का उपयोग करके सभी व्यक्त किए जा सकते हैं। के समान है । के बराबर है । और उसी के समान है। इसका उपयोग करने के लिए I8217 बेहतर है । या। जब आप कर सकते हैं, बस क्योंकि they8217re कम और पढ़ने के लिए आसान रेगुलर एक्सप्रेशन का उपयोग करना अब कि हम 8217ve ने कुछ सरल रेगुलर एक्सप्रेशंस को देखा, हम इन्हें वास्तव में कैसे पाइथन में इस्तेमाल करते हैं फिर से मॉड्यूल रेगुलर एक्सपीसेशन इंजिन के लिए इंटरफ़ेस प्रदान करता है, जिससे आप ऑब्जेक्ट में आरई को संकलित कर सकते हैं और फिर उनके साथ मैचों को प्रदर्शन कर सकते हैं। रेग्युलर एक्सप्रेशंस को संकलित करना नियमित अभिव्यक्ति पैटर्न ऑब्जेक्ट में संकलित होती है, जिसमें विभिन्न कार्यों के लिए तरीके होते हैं जैसे पैटर्न मैचों के लिए खोज करना या स्ट्रिंग प्रतिस्थापन करना। repile () भी एक वैकल्पिक झंडे तर्क स्वीकार करता है, जो कि विभिन्न विशेष सुविधाओं और वाक्यविन्यास विविधताओं को सक्षम करता है। We8217ll बाद में उपलब्ध सेटिंग्स पर जाना है, लेकिन अब एक उदाहरण के लिए होगा: RE को repile () को स्ट्रिंग के रूप में पारित किया गया है आरई को स्ट्रिंग्स के रूप में संभाला जाता है क्योंकि नियमित अभिव्यक्तिएं पायथन भाषा की नं 8217t भाग होती हैं, और उन्हें अभिव्यक्त करने के लिए कोई विशेष सिंटैक्स नहीं बनाया गया था। (ऐसे आवेदन हैं जो don8217t को आरई की आवश्यकता होती है, इसलिए उनको शामिल करके 8217 के भाषा विनिर्देश को ब्लोट करना पड़ता है।) इसके बजाय, पुनः मॉड्यूल केवल एक सी एक्सटेंशन मॉड्यूल है जो पायथन के साथ शामिल है, जैसे सॉकेट या ज़लिब मॉड्यूल। आरई को स्ट्रिंग्स में डालना पायथन भाषा को सरल बना देता है, लेकिन एक नुकसान होता है जो अगले अनुभाग का विषय होता है। बैकस्लैश प्लेग जैसा कि पहले कहा गया है, नियमित अभिव्यक्ति विशेष रूपों को इंगित करने के लिए बैकस्लैश वर्ण () का उपयोग करती है या विशेष वर्णों को उनके विशेष अर्थ के बिना प्रयोग करने की अनुमति देती है। स्ट्रिंग लीटरल्स में समान उद्देश्य के लिए Python8217 के उपयोग के साथ यह संघर्ष। Let8217 का कहना है कि आप एक आरई लिखना चाहते हैं जो स्ट्रिंग अनुभाग से मेल खाता है। जो कि लेटेक्स फ़ाइल में पाया जा सकता है कार्यक्रम कोड में क्या लिखना है, यह पता लगाने के लिए, मिलान करने के लिए इच्छित स्ट्रिंग से शुरू करें इसके बाद, आपको किसी भी बैकस्लैश और अन्य मेटाचैक्टर्स को बैकस्लैश से पहले से बचाना होगा, जिसके परिणामस्वरूप स्ट्रिंग अनुभाग होगा। परिणामी स्ट्रिंग को repile () को पारित किया जाना चाहिए अनुभाग होना चाहिए हालांकि, इसे एक पायथन स्ट्रिंग के रूप में व्यक्त करने के लिए, दोनों बैकस्लैश फिर से भाग जाएंगे। सभी उपस्ट्रिंग खोजें जहां आरई मेल खाता है, और उन्हें इटरेटर के रूप में लौटाता है मैच () और खोज () वापसी कोई मेल नहीं मिला अगर कोई भी मैच नहीं मिला। अगर they8217re सफल, एक मैच ऑब्जेक्ट उदाहरण लौटा है, जो मैच के बारे में जानकारी रखता है: जहां यह शुरू होता है और समाप्त होता है, यह ऑप्शन मिलान करता है, और अधिक। आप पुनः मॉड्यूल के साथ इंटरैक्टिव रूप से प्रयोग करके इस बारे में सीख सकते हैं। यदि आपके पास कंकनेवाला उपलब्ध है, तो आप Toolsscriptsreademo. py को भी देखना चाह सकते हैं। एक प्रदर्शन कार्यक्रम में पायथन वितरण शामिल था। यह आपको आरई और तारों में प्रवेश करने की अनुमति देता है, और दिखाता है कि क्या आरई मिलान या असफलता है। redemo. py काफी उपयोगी हो सकता है जब एक जटिल आरई डीबग करने की कोशिश कर रहा हो। फिल श्वार्टज़ 8217 के कोडोस भी आरई पैटर्न के विकास और परीक्षण के लिए एक इंटरैक्टिव टूल है। यह HOWTO अपने उदाहरणों के लिए मानक पायथन इंटरप्रिटर का उपयोग करता है सबसे पहले, पायथन इंटरप्रिटर चलाएं, फिर से मॉड्यूल आयात करें, और आरई को संकलित करें: अब, आप आरई ए-जेड के विरुद्ध विभिन्न तारों को मिलान करने का प्रयास कर सकते हैं। एक खाली स्ट्रिंग shouldn8217t मैच बिल्कुल, क्योंकि 8216one या अधिक repetitions8217 का मतलब है। मैच () को इस मामले में कोई भी नहीं लौटा देना चाहिए, जिससे दुभाषिया को कोई आउटपुट प्रिंट नहीं किया जाएगा। आप इसे स्पष्ट करने के लिए मैच () के परिणाम को स्पष्ट रूप से प्रिंट कर सकते हैं अब, let8217 इसे एक स्ट्रिंग पर आज़माएं जिसे इसे मैच करना चाहिए, जैसे कि टेम्पो। इस मामले में, मैच () एक मैच ऑब्जेक्ट वापस करेगा। इसलिए आपको परिणामस्वरूप बाद के उपयोग के लिए एक चर में परिणाम संग्रहीत करना चाहिए। अब आप मिलान स्ट्रिंग के बारे में जानकारी के लिए मैच ऑब्जेक्ट को क्वेरी कर सकते हैं। मैच ऑब्जेक्ट इंस्टेंसेस में भी कई तरीकों और गुण हैं जो सबसे महत्वपूर्ण हैं: इन तरीकों की कोशिश करने से जल्द ही उनका अर्थ स्पष्ट होगा: समूह () आरई द्वारा मिलान किए गए ऑरिंग रिटर्न देता है। शुरू () और अंत () मैच के शुरुआती और समापन सूचक को वापस आती है। अवधि () एक ट्यूपल में शुरुआत और समाप्ति अनुक्रमण दोनों देता है चूंकि मैच () विधि केवल जांचता है कि यदि आरई एक स्ट्रिंग की शुरुआत में मेल खाता है, तो शुरू () हमेशा शून्य हो जाएगा। हालांकि, पैटर्न की खोज () पद्धति स्ट्रिंग के माध्यम से स्कैन करती है, इसलिए उस स्थिति में मैच शून्य पर शुरू नहीं हो सकता है। वास्तविक कार्यक्रमों में, सबसे सामान्य शैली मैच ऑब्जेक्ट को एक चर में संग्रहित करना है, और फिर जांचें कि क्या यह कोई नहीं था। यह आम तौर पर दिखता है: दो पैटर्न पद्धतियां एक पैटर्न के लिए सभी मैचों वापस आती हैं Findall () मिलान तार की एक सूची देता है: findall () को परिणाम के रूप में लौटाया जा सकता से पहले पूरी सूची बनाने के लिए है शोधक () विधि एक वस्तु के रूप में मिलान ऑब्जेक्ट उदाहरणों का एक क्रम देता है। 1 मॉड्यूल-स्तर कार्य आप don8217t को एक पैटर्न ऑब्जेक्ट बनाने और इसके तरीकों को कॉल करने के लिए फिर से मॉड्यूल भी मिलान नामक शीर्ष-स्तरीय फ़ंक्शन प्रदान करता है ()। खोज()। सब ढूँढ़ो()। उप ()। इत्यादि। ये फ़ंक्शंस उसी तर्क को इसी पैटर्न विधि के रूप में लेते हैं, आरई स्ट्रिंग के साथ पहली तर्क के रूप में जोड़ा जाता है, और फिर भी या तो कोई भी या कोई मैच ऑब्जेक्ट इंस्टेंस नहीं लौटाता है। हुड के तहत, ये फ़ंक्शंस आपके लिए केवल एक पैटर्न ऑब्जेक्ट बनाते हैं और उस पर उपयुक्त विधि को कॉल करते हैं। वे संकलित ऑब्जेक्ट को कैश में संग्रहीत करते हैं, इसलिए भविष्य में उसी री का उपयोग कर कॉल तेजी से होती है। क्या आप इन मॉड्यूल-स्तरीय फ़ंक्शंस का उपयोग करना चाहिए, या आपको पैटर्न प्राप्त करना चाहिए और अपने तरीकों से खुद को कॉल करना चाहिए यह विकल्प इस बात पर निर्भर करता है कि री कितनी बार इस्तेमाल किया जाएगा, और आपकी व्यक्तिगत कोडन शैली पर। यदि आरई का कोड में केवल एक बिंदु पर उपयोग किया जा रहा है, तो मॉड्यूल फ़ंक्शंस शायद अधिक सुविधाजनक हो। यदि किसी प्रोग्राम में बहुत से नियमित अभिव्यक्तियां हैं, या कई स्थानों में उसी लोगों का पुन: उपयोग करता है, तो यह सभी परिभाषाओं को एक ही स्थान पर एकत्रित करने के लिए उपयुक्त हो सकता है, कोड के एक भाग में जो समय से पहले सभी आरई संकलित करता है मानक लाइब्रेरी से उदाहरण लेने के लिए, यहां 8217 का बहिष्कृत एक्सएमलीब मॉड्यूल से एक उद्धरण: मैं आमतौर पर संकलित ऑब्जेक्ट के साथ काम करना पसंद करता हूं, यहां तक ​​कि एक बार उपयोग करने के लिए भी, लेकिन कुछ लोगों को इस बारे में जितना मैं जानता हूँ । संकलन झंडे संकलन झंडे ने आपको कुछ पहलुओं को संशोधित करने के लिए रेग्युलर एक्सप्रेशन कैसे काम किया। झंडे फिर से दो नामों के तहत, IGNORECASE और एक छोटा नाम जैसे एक आईएनजी के रूप में I-I. (यदि आप 8217re Perl8217s पैटर्न संशोधक से परिचित हैं, एक पत्र के रूप में एक ही नाम के छोटे अक्षरों का इस्तेमाल करते हैं re. VERBOSE के re. X उदाहरण के लिए है।) एकाधिक झंडे bitwise द्वारा निर्दिष्ट किया जा सकता है या फिर उन्हें re. I re. M दोनों I और M झंडे सेट करता है, उदाहरण के लिए। यहां उपलब्ध झंडे की एक तालिका 8217 है, उसके बाद प्रत्येक एक के अधिक विस्तृत विवरण। W जैसे कई पलायन करता है ख। एस और डी यूनिकोड वर्ण डेटाबेस पर निर्भर है। मामला-असंवेदनशील मिलान वाले चरित्र वर्ग को बनाये रखें और अक्षर को अनदेखा करके अक्षर मिलेंगे। उदाहरण के लिए, ए-जेड लोअरकेस अक्षरों से मेल खाएंगे, और स्पैम स्पैम से मेल खायेगा। स्पैम। या स्पैम यह lowercasing doesn8217t मौजूदा लोकेल खाते में ले लो यह होगा अगर आप भी LOCALE झंडा निर्धारित किया है डब्ल्यू करें डब्ल्यू। बी। और बी वर्तमान लोकेल पर निर्भर है। लोकेल सी लाइब्रेरी की एक विशेषता है, जो प्रोग्राम लिखने में मदद करते हैं जो भाषा के मतभेदों को देखते हैं। उदाहरण के लिए, यदि you8217re फ्रेंच पाठ की प्रक्रिया में है, तो you8217d शब्द मिलान करने के लिए w लिखने में सक्षम होना चाहते हैं, लेकिन केवल वर्ण वर्ग ए-जेड-जे से मिलान होता है यह 8217t मैच जीतता है या। अगर आपका सिस्टम ठीक से कॉन्फ़िगर किया गया है और एक फ्रांसीसी लोकेल चुना गया है, तो निश्चित सी फ़ंक्शन प्रोग्राम को बताएगा, जिसे भी एक पत्र माना जाना चाहिए। एक नियमित अभिव्यक्ति संकलित करते समय LOCALE फ़्लैग को सेट करने से परिणामी संकलित ऑब्जेक्ट को इन सी फ़ंक्शन के उपयोग के लिए धीमा होना चाहिए, लेकिन यह भी आप के रूप में फ़्रेंच शब्द से मेल खाने के लिए सक्षम बनाता है, जैसा कि आप की उम्मीद है। (और haven8217t अभी तक समझाया गया है कि they8217ll अधिक Metacharactors अनुभाग में पेश किया जाएगा।) आमतौर पर केवल स्ट्रिंग की शुरुआत में मेल खाता है, और स्ट्रिंग के अंत में केवल स्ट्रिंग के अंत में ही नई लाइन (यदि कोई हो) से पहले मेल खाता है। जब इस ध्वज को निर्दिष्ट किया जाता है, तो स्ट्रिंग की शुरुआत में और प्रत्येक पंक्ति की शुरुआत में, प्रत्येक न्यूलाइन के तुरंत बाद स्ट्रिंग के भीतर मिलान करता है इसी प्रकार, मेटाचार्कैङ किसी भी स्ट्रिंग के अंत में और प्रत्येक पंक्ति के अंत में (तुरंत प्रत्येक नई रेखा से पहले) मेल करता है। इसे बनाएं । विशेष चरित्र किसी भी चरित्र से मेल खाता है, इसमें इस ध्वज के बिना एक नई लाइन भी शामिल है। एक नई लाइन को छोड़कर कुछ भी मैच करेगी डब्ल्यू करें डब्ल्यू। बी। बी डी। डीसी और एस यूनिकोड वर्ण गुण डेटाबेस पर निर्भर हैं। यह ध्वज आपको नियमित रूप से अभिव्यक्ति लिखने देता है जो आप उन्हें प्रारूपित करने में अधिक लचीलापन प्रदान करके अधिक पठनीय हैं। जब यह ध्वज निर्दिष्ट किया गया है, तो रे स्ट्रिंग के भीतर सफेद स्थान को अनदेखा कर दिया जाता है, सिवाय इसके कि जब रिक्त स्थान किसी वर्ण वर्ग में है या पूर्व में बिना किसी अपठित बैकस्लैश से आपको आरई को अधिक स्पष्ट रूप से व्यवस्थित और इंडेंट करने देता है यह झंडा आपको एक आरई के अंदर टिप्पणियां डाल देता है जो इंजिन की टिप्पणियों द्वारा अनदेखा कर दिया जाएगा, उस 8217 के द्वारा वर्णित नहीं है, न ही एक चरित्र वर्ग में या एक बेतरतीब बैकस्लैश से पहले। उदाहरण के लिए, यहां 8217 एक आरई है जो re. VERBOSE का उपयोग करता है, यह देखें कि वर्बोज़ सेटिंग के बिना पढ़ने के लिए कितना आसान है, आरई इस तरह दिखता है: ऊपर दिए गए उदाहरण में, स्ट्रिंग लीटरल्स के पायथन 8217 के स्वत: सम्मिलन को आरई को तोड़ने के लिए इस्तेमाल किया गया है छोटे टुकड़ों में, लेकिन यह पुनः 8327 का इस्तेमाल करते हुए संस्करण की तुलना में समझने में अभी भी कठिन है I अधिक पैटर्न पावर अभी तक we8217ve केवल नियमित अभिव्यक्ति की सुविधाओं का एक हिस्सा कवर। इस खंड में, we8217ll कुछ नए metacharacters को कवर, और मिलान किया गया था कि पाठ के हिस्से को पुनः प्राप्त करने के लिए समूहों का उपयोग कैसे करें। अधिक Metacharacters वहाँ कुछ metacharacters है कि हम अभी तक कवर haven8217t हैं। उनमें से ज्यादातर इस अनुभाग में शामिल होंगे। शेष मेटाचैक्टरों में से कुछ चर्चा करने के लिए शून्य-चौड़े दावे हैं वे don8217t इंजन के बजाय स्ट्रिंग के माध्यम से आगे बढ़ने के कारण होते हैं, वे कोई भी अक्षर नहीं लेते हैं, और केवल सफल या विफल होते हैं। उदाहरण के लिए, बी यह एक अभियोग है कि वर्तमान स्थिति शब्द सीमा पर स्थित है, स्थिति isn8217t सभी पर बी द्वारा बदल दिया है। इसका मतलब यह है कि शून्य-चौथा दावों को दोहराया नहीं जाना चाहिए, क्योंकि यदि वे किसी दिए गए स्थान पर एक बार मैच करते हैं, तो जाहिर है कि वे कई बार अनंत संख्या से मेल खा सकते हैं। वैकल्पिक, या 8220 और 8221 ऑपरेटर। यदि ए और बी नियमित अभिव्यक्ति होते हैं, तो एबी किसी भी स्ट्रिंग से मेल खाएगा जो कि ए या बी से मेल खाती है। यह बहुत कम प्राथमिकता से मेल खाती है ताकि आप मज़दूर अक्षर स्ट्रिंग्स को बदल सकें। CrowServo क्रो या सर्वो से मेल खाएंगे नहीं क्रो एक डब्ल्यू या एक एस और ऊर्वो एक शाब्दिक मैच के लिए उपयोग । या इसे एक चरित्र वर्ग के अंदर के रूप में संलग्न करें। लाइनों की शुरुआत में मेल खाता है जब तक मल्टीलाइन ध्वज सेट नहीं किया गया है, यह केवल स्ट्रिंग की शुरुआत से मेल खाता होगा। मल्टीलाइन मोड में, यह स्ट्रिंग के प्रत्येक न्यूलाइन के तुरंत बाद मेल खाता है। उदाहरण के लिए, यदि आप शब्द से केवल एक पंक्ति की शुरुआत में शब्द से मिलान करना चाहते हैं, तो आरई का उपयोग करने से है I एक पंक्ति के अंत में मेल खाता है, जो स्ट्रिंग के अंत में या किसी नए स्थान के बाद किसी भी स्थान के रूप में परिभाषित है। एक शाब्दिक मैच के लिए उपयोग या इसे एक चरित्र वर्ग के अंदर के रूप में, जैसे में। स्ट्रिंग की शुरुआत में केवल एक मेल खाता है जब मल्टीलाइन मोड में नहीं, ए और प्रभावी रूप से एक ही है। मल्टीलाइन मोड में, they8217re अलग: एक अभी भी स्ट्रिंग की शुरुआत में ही मेल खाता है, लेकिन स्ट्रिंग के भीतर किसी भी स्थान पर मिलान हो सकता है, जो एक नए वर्ण के अनुसरण करते हैं। Z केवल स्ट्रिंग के अंत में मेल खाता है। बी वर्ड सीमा यह एक शून्य-चौथा दावा है जो किसी शब्द के आरंभ या अंत में मेल खाता है। एक शब्द को अल्फ़ान्यूमेरिक वर्णों के अनुक्रम के रूप में परिभाषित किया जाता है, इसलिए एक शब्द का अंत सफेद स्थान या गैर-अल्फ़ान्यूमेरिक वर्ण द्वारा दर्शाया गया है। निम्नलिखित उदाहरण केवल क्लास से मेल खाता है, जब यह एक पूर्ण शब्द के साथ 8217 का मिलान करता है, तो यह 8217 का मैच जब दूसरे शब्द के अंदर स्थित है। इस विशेष अनुक्रम का उपयोग करते समय आपको याद रखना चाहिए दो सूक्ष्मताएं हैं सबसे पहले, यह पायथन 8217 के स्ट्रिंग लीटरल्स और रेगुलर एक्सप्रेशन सीक्वेंस के बीच सबसे खराब टक्कर है। पायथन 8217 के स्ट्रिंग लिटरल्स में, बी बैकस्पेस वर्ण, एएससीआईआई 8 का मान है। यदि आप 8217 री कच्चे स्ट्रिंग्स का इस्तेमाल नहीं करते हैं, तो अजगर बी को बैकलस्पेस में परिवर्तित कर देगा, और आपके आरई ने 8217-ट मैच मैच की अपेक्षा की है। निम्नलिखित उदाहरण हमारे पिछले आरई के समान दिखता है, लेकिन आर आर स्ट्रिंग के सामने आर omits। दूसरा, एक वर्ण वर्ग के अंदर, जहां इस गवाही के लिए 8217 का कोई फायदा नहीं है, बी बैक्षस्पेस वर्ण को दर्शाता है, पायथन 8217 के स्ट्रिंग लीटरल्स के साथ संगतता के लिए। बी एक और शून्य चौड़ाई का दावा, यह बी के विपरीत है केवल तभी मिलान होना चाहिए जब वर्तमान स्थिति शब्द सीमा पर नहीं होती है अक्सर आपको अधिक से अधिक जानकारी प्राप्त करने की ज़रूरत है, चाहे आरई मिलान हो या न हो। रेग्युलर एक्सप्रेशंस अक्सर आरई को कई उपसमूहों में विभाजित करके स्ट्रिंग्स काटना करने के लिए उपयोग किया जाता है जो ब्याज के विभिन्न घटकों से मेल खाते हैं। उदाहरण के लिए, एक आरएफसी -822 हेडर रेखा को हेडर नाम और एक मान में विभाजित किया जाता है: इस तरह से: यह एक नियमित अभिव्यक्ति लिखकर नियंत्रित किया जा सकता है जो एक पूरे हेडर रेखा से मेल खाता है, और एक समूह है जो हैडर नाम से मेल खाता है, और एक अन्य समूह है जो हैडर 8217 के मान से मेल खाता है। समूह (।) Metacharacters द्वारा चिह्नित हैं। (और) बहुत ही अर्थ है क्योंकि वे गणितीय अभिव्यक्ति में करते हैं, उनके अंदर मौजूद अभिव्यक्तियों को एक साथ समूह करते हैं, और आप किसी समूह की सामग्री दोहराए जाने योग्य क्वालिफायर के साथ दोहरा सकते हैं, जैसे कि । या उदाहरण के लिए, (एबी) अब के शून्य या अधिक पुनरावृत्ति से मेल खाएगा। समूह (।) के साथ इंगित किए गए समूह भी उस टेक्स्ट के प्रारंभिक और समापन सूचक को कैप्चर करते हैं, जो इससे मेल खाता है, इसे समूह () के तर्क को पारित करके पुनर्प्राप्त किया जा सकता है प्रारंभ()। समाप्त()। और अवधि () समूह 0 से शुरू होने वाले नंबर रहे हैं। समूह 0 हमेशा पूरे आईटीओ में मौजूद है, इसलिए मैच ऑब्जेक्ट के तरीकों में सभी समूह 0 को उनके डिफ़ॉल्ट तर्क के रूप में है। बाद में we8217ll देखें कि समूहों को कैसे व्यक्त किया जाए जो कि don8217t उस पाठ की अवधि को कैप्चर करते हैं जो वे मैच करते हैं। उप समूह को बाएं से दाएं, 1 ऊपर की ओर से गिने गए हैं। समूहों को संख्या निर्धारित करने के लिए नेस्टेड किया जा सकता है, बस बाएं से दाएं तक जाकर, उद्घाटन कोष्ठक वर्णों की गणना करें समूह () को एक समय में कई समूह संख्याओं को पारित किया जा सकता है, जिस स्थिति में उन समूहों के लिए इसी मूल्य वाले ट्यूपल को वापस कर दिया जाएगा। समूह () विधि सभी उपसमूहों के लिए तार युक्त एक ट्यूपल देता है, 1 से लेकर कई तक। एक पैटर्न में बैक्रीएफ़्रेन्स आपको निर्दिष्ट करने की अनुमति देता है कि पहले कैप्चरिंग समूह की सामग्री को स्ट्रिंग में वर्तमान स्थान पर भी दिखना चाहिए। उदाहरण के लिए, 1 सफल होगा यदि समूह 1 की सटीक सामग्री वर्तमान स्थिति में पाई जा सकती है, और अन्यथा विफल हो जाती है। याद रखें कि पायथन 8217 की स्ट्रिंग लीटरल स्ट्रिंग में मनमाना वर्णों को अनुमति देने के लिए संख्याओं के बाद एक बैकस्लैश का उपयोग करती है, इसलिए किसी आरई में बैक्रीएरिंस को शामिल करते समय एक कच्ची स्ट्रिंग का उपयोग करना सुनिश्चित करें। उदाहरण के लिए, निम्नलिखित आरई एक स्ट्रिंग में दोगुनी शब्दों का पता लगाता है। इस तरह के बैक्रीरिएंट्स aren8217t केवल स्ट्रिंग 8212 के माध्यम से खोज के लिए उपयोगी होते हैं, जो कुछ पाठ स्वरूप हैं, जो इस प्रकार 8212 में डेटा को दोहराते हैं लेकिन you8217ll जल्द ही यह पता लगा सकते हैं कि वे स्ट्रिंग प्रतिस्थापन करते समय बहुत उपयोगी हैं I8217। गैर कैप्चरिंग और एनएम्ड ग्रुप एलएकेआर आरई कई समूहों का उपयोग कर सकते हैं, दोनों हित के सबस्ट्रिंग को पकड़ने और समूह बनाने और आरई के लिए स्वयं को ढांचा बनाने के लिए। जटिल आरई में, समूह संख्याओं का ट्रैक रखना मुश्किल हो जाता है इस समस्या के साथ मदद करने वाली दो विशेषताएं हैं वे दोनों नियमित अभिव्यक्ति एक्सटेंशन के लिए एक आम वाक्यविन्यास का उपयोग करते हैं, इसलिए हम उस प्रथम को देखें I8217 पर्ल 5 ने मानक नियमित अभिव्यक्तियों के लिए कई अतिरिक्त विशेषताएं जोड़े, और पायथन पुनः मॉड्यूल उनमें से अधिकतर का समर्थन करता है। नए एकल-कुंजीस्ट्रोक मेटाचैक्टर्स या नए विशेष दृश्यों का प्रतिनिधित्व करना शुरू करना मुश्किल होगा, बिना पारंपरिक रीस से पर्ल 8217 के रेगुलर एक्सप्रेशंस को अलग तरह से अलग करना। यदि आप amp को एक नया मेटाचैरैक्टर के रूप में चुना है, उदाहरण के लिए, पुरानी अभिव्यक्ति यह मान लेगी कि amp एक नियमित चरित्र था और amp; 8217t amp या amp लिखकर इसे बच गया है। पर्ल डेवलपर्स द्वारा चुना गया समाधान, एक्सटेंशन वाक्यविन्यास के रूप में (।) का उपयोग करना था। तुरंत एक कोष्ठक के बाद एक वाक्य रचना त्रुटि थी क्योंकि दोहराने के लिए कुछ भी नहीं होगा, इसलिए यह किसी भी संगतता समस्याओं का परिचय नहीं किया। तुरंत बाद के अक्षर यह इंगित करें कि किस एक्सटेंशन का उपयोग किया जा रहा है, इसलिए (एफू) एक चीज है (एक सकारात्मक रूप धारण करने वाला दावा) और (: फू) कुछ और है (उप-कैप्चरिंग समूह जिसमें उप एक्सपैशन फू शामिल है) पायथन Perl8217 के एक्सटेंशन वाक्यविन्यास के लिए एक एक्सटेंशन वाक्यविन्यास जोड़ता है। यदि प्रश्न चिह्न के बाद पहला अक्षर पी है। आप जानते हैं कि यह 8217 एक विस्तार है जो कि 8217 विशिष्ट पायथन के लिए है। वर्तमान में इस तरह के दो ऐसे एक्सटेंशन हैं: (पीटीएनएजीटी।) एक नामित समूह को परिभाषित करता है, और (पीएनए) एक नामांकित समूह के लिए एक बैक्राइफर है। यदि पर्ल 5 के भविष्य के संस्करण एक अलग सिंटैक्स का उपयोग करते हुए इसी तरह की विशेषताएं जोड़ते हैं, तो नए सिंटैक्स का समर्थन करने के लिए फिर से मॉड्यूल बदल जाएगा, जबकि संगतता 8217 के लिए पायथन-विशिष्ट सिंटैक्स को संरक्षित करते हुए। अब जब कि हम 8787ve ने सामान्य एक्सटेंशन वाक्यविन्यास को देखा, हम उन सुविधाओं पर वापस लौट सकते हैं जो जटिल आरई में समूहों के साथ काम करना आसान बनाते हैं। चूंकि समूहों को बाएं से दाएं नंबर दिया गया है और एक जटिल अभिव्यक्ति कई समूहों का उपयोग कर सकती है, सही संख्याओं का ट्रैक रखने में मुश्किल हो सकती है इस तरह के एक जटिल आरई को संशोधित करना परेशान है, यह भी: शुरुआत के निकट एक नया समूह डालें और आप उसके पीछे आने वाली हर चीज को बदलते हैं। कभी-कभी आप 8217ll नियमित अभिव्यक्ति के एक भाग को एकत्र करने के लिए एक समूह का उपयोग करना चाहते हैं, लेकिन समूह 8217 की सामग्री को पुनः प्राप्त करने में रुचि रखते हैं I8217 आप एक गैर-कैप्चरिंग समूह का उपयोग कर इस तथ्य को स्पष्ट कर सकते हैं: (।) जहां आप प्रतिस्थापित कर सकते हैं किसी अन्य नियमित अभिव्यक्ति के साथ इस तथ्य को छोड़कर कि आप समूह को किस प्रकार से मेल कर सकते हैं की सामग्री को पुनः प्राप्त कर सकते हैं, एक गैर-कैप्चरिंग समूह एक कैप्चरिंग समूह के समान ही बर्ताव करता है जिसे आप इसके अंदर कुछ भी डाल सकते हैं, जैसे कि पुनरावृत्ति मेटाचैरैक्टर जैसे दोहराएं। और अन्य समूहों (कैप्चरिंग या गैर कैप्चरिंग) के भीतर इसे घोंसला। (।) एक मौजूदा पैटर्न को संशोधित करते समय विशेष रूप से उपयोगी होता है, क्योंकि आप बिना अन्य समूहों को जोड़कर जोड़ सकते हैं कि अन्य सभी समूहों को कैसे गिने जाते हैं इसका उल्लेख किया जाना चाहिए कि कैप्चरिंग और गैर-कैप्चरिंग समूहों के बीच में खोज करने में 8217 का कोई अंतर नहीं है न तो फॉर्म दूसरे की तुलना में तेज़ है एक अधिक महत्वपूर्ण विशेषता समूह नाम दिया गया है: संख्याओं के आधार पर उन्हें संदर्भित करने के बजाय, किसी नाम से समूहों को संदर्भित किया जा सकता है। एक नामित समूह के लिए सिंटैक्स पायथन-विशिष्ट विस्तारों में से एक है: (प्लैटनामगेट।) नाम जाहिर है, समूह का नाम है। नामांकित समूह भी कैप्चरिंग समूहों की तरह व्यवहार करते हैं, और साथ ही समूह के साथ एक नाम संबद्ध करते हैं। मिलान ऑब्जेक्ट विधियों जो कि कैप्चरिंग समूहों के साथ काम करते हैं, वे सभी या तो पूर्णांक को स्वीकार करते हैं जो ग्रुप को वांछित समूह 8217 नाम वाले नंबर या स्ट्रिंग्स से दर्शाते हैं। नामांकित समूहों को अभी भी संख्या दी गई है, ताकि आप दो तरीकों से एक समूह के बारे में जानकारी प्राप्त कर सकें: नामांकित समूह आसान होते हैं क्योंकि वे आपको संख्या याद रखने के बजाय आसानी से याद किए गए नामों का उपयोग करते हैं। यहां 8217 एक IMApilib मॉड्यूल से उदाहरण: यह 8217s स्पष्ट रूप से m. group (zonem) को पुनः प्राप्त करने के लिए बहुत आसान है। समूह 9 को पुनः प्राप्त करने के लिए याद रखने के बजाय। एक अभिव्यक्ति में बैक्रीएफ़्रेन्स के लिए वाक्यविन्यास जैसे (।) 1 समूह की संख्या को दर्शाता है। वहाँ 8217s स्वाभाविक रूप से एक संख्या है जो नंबर के बजाय समूह नाम का उपयोग करता है। यह एक और पायथन एक्सटेंशन है: (पीएनए) इंगित करता है कि समूह नामक समूह की सामग्री को वर्तमान बिंदु पर फिर से मिलान किया जाना चाहिए। दोगुनी शब्दों, (बीडब्ल्यू) एस 1 को खोजने के लिए नियमित अभिव्यक्ति (पीटीटी) शब्द (पीवर्ड) के रूप में भी लिखा जा सकता है: लुकहेड अटैर्शन एक अन्य शून्य-चौथा दावेदार लेटरहाइड का दावा है। लुकहाहेड का दावा दोनों सकारात्मक और नकारात्मक रूप में उपलब्ध है, और इस तरह दिखें: (।) सकारात्मक रूप से अभिप्राय। यह तब सफल होता है जब निहित रेगुलर एक्सप्रेशन, द्वारा यहां दर्शाया गया। वर्तमान स्थान पर सफलतापूर्वक मैच करता है, और अन्यथा विफल रहता है। लेकिन, एक बार निहित अभिव्यक्ति की कोशिश की गई है, मेलिंग इंजन doesn8217t सभी अन्य पैटर्न पर अग्रिम की कोशिश की है जहां दावा शुरू किया। (।) नकारात्मक नजरिया का दावा। सकारात्मक अभिव्यक्ति के विपरीत यह सफल होता है यदि स्ट्रिंग में वर्तमान स्थिति में समाहित अभिव्यक्ति doesn8217t मैच। इस कंक्रीट को बनाने के लिए, let8217 के मामले को देखो जहां एक लेटरआहेड उपयोगी है। एक फ़ाइल नाम से मेल खाने के लिए एक सरल प्रतिमान पर विचार करें और उसे आधार नाम और एक एक्सटेंशन में विभाजित करें, जो एक से अलग है। उदाहरण के लिए, news. rc. समाचार आधार नाम है, और आरसी फ़ाइल नाम 8217 एक्सटेंशन है। यह मैच करने के लिए पैटर्न काफी सरल है: ध्यान दें कि विशेष रूप से इलाज की जरूरत है क्योंकि यह एक मेटाचैरैक्टर I8217ve को एक चरित्र वर्ग के अंदर रखा गया है। इसके बाद अनुगामी को नोटिस करें यह सुनिश्चित करने के लिए जोड़ा गया है कि सभी शेष स्ट्रिंग को विस्तार में शामिल किया जाना चाहिए। This regular expression matches foo. bar and autoexec. bat and sendmail. cf and printers. conf . Now, consider complicating the problem a bit what if you want to match filenames where the extension is not bat. Some incorrect attempts:.b. The first attempt above tries to exclude bat by requiring that the first character of the extension is not a b. This is wrong, because the pattern also doesn8217t match foo. bar . The expression gets messier when you try to patch up the first solution by requiring one of the following cases to match: the first character of the extension isn8217t b the second character isn8217t a or the third character isn8217t t. This accepts foo. bar and rejects autoexec. bat. but it requires a three-letter extension and won8217t accept a filename with a two-letter extension such as sendmail. cf. We8217ll complicate the pattern again in an effort to fix it. In the third attempt, the second and third letters are all made optional in order to allow matching extensions shorter than three characters, such as sendmail. cf . The pattern8217s getting really complicated now, which makes it hard to read and understand. Worse, if the problem changes and you want to exclude both bat and exe as extensions, the pattern would get even more complicated and confusing. A negative lookahead cuts through all this confusion: .(bat). The negative lookahead means: if the expression bat doesn8217t match at this point, try the rest of the pattern if bat does match, the whole pattern will fail. The trailing is required to ensure that something like sample. batch. where the extension only starts with bat. will be allowed. The . makes sure that the pattern works when there are multiple dots in the filename. Excluding another filename extension is now easy simply add it as an alternative inside the assertion. The following pattern excludes filenames that end in either bat or exe : Modifying Strings Up to this point, we8217ve simply performed searches against a static string. Regular expressions are also commonly used to modify strings in various ways, using the following pattern methods: Splitting Strings The split() method of a pattern splits a string apart wherever the RE matches, returning a list of the pieces. It8217s similar to the split() method of strings but provides much more generality in the delimiters that you can split by split() only supports splitting by whitespace or by a fixed string. As you8217d expect, there8217s a module-level re. split() function, too. Split string by the matches of the regular expression. If capturing parentheses are used in the RE, then their contents will also be returned as part of the resulting list. If maxsplit is nonzero, at most maxsplit splits are performed. You can limit the number of splits made, by passing a value for maxsplit . When maxsplit is nonzero, at most maxsplit splits will be made, and the remainder of the string is returned as the final element of the list. In the following example, the delimiter is any sequence of non-alphanumeric characters. Sometimes you8217re not only interested in what the text between delimiters is, but also need to know what the delimiter was. If capturing parentheses are used in the RE, then their values are also returned as part of the list. Compare the following calls: The module-level function re. split() adds the RE to be used as the first argument, but is otherwise the same. Search and Replace Another common task is to find all the matches for a pattern, and replace them with a different string. The sub() method takes a replacement value, which can be either a string or a function, and the string to be processed. Returns the string obtained by replacing the leftmost non-overlapping occurrences of the RE in string by the replacement replacement . If the pattern isn8217t found, string is returned unchanged. The optional argument count is the maximum number of pattern occurrences to be replaced count must be a non-negative integer. The default value of 0 means to replace all occurrences. Here8217s a simple example of using the sub() method. It replaces colour names with the word colour : The subn() method does the same work, but returns a 2-tuple containing the new string value and the number of replacements that were performed: Empty matches are replaced only when they8217re not adjacent to a previous match. If replacement is a string, any backslash escapes in it are processed. That is, n is converted to a single newline character, r is converted to a carriage return, and so forth. Unknown escapes such as j are left alone. Backreferences, such as 6. are replaced with the substring matched by the corresponding group in the RE. This lets you incorporate portions of the original text in the resulting replacement string. This example matches the word section followed by a string enclosed in . and changes section to subsection : There8217s also a syntax for referring to named groups as defined by the (Pltnamegt. ) syntax. gltnamegt will use the substring matched by the group named name. and gltnumbergt uses the corresponding group number. glt2gt is therefore equivalent to 2. but isn8217t ambiguous in a replacement string such as glt2gt0. ( 20 would be interpreted as a reference to group 20, not a reference to group 2 followed by the literal character 0 .) The following substitutions are all equivalent, but use all three variations of the replacement string. replacement can also be a function, which gives you even more control. If replacement is a function, the function is called for every non-overlapping occurrence of pattern . On each call, the function is passed a match object argument for the match and can use this information to compute the desired replacement string and return it. In the following example, the replacement function translates decimals into hexadecimal: When using the module-level re. sub() function, the pattern is passed as the first argument. The pattern may be provided as an object or as a string if you need to specify regular expression flags, you must either use a pattern object as the first parameter, or use embedded modifiers in the pattern string, e. g. sub(quot(i)bquot, quotxquot, quotbbbb BBBBquot) returns x x . Common Problems Regular expressions are a powerful tool for some applications, but in some ways their behaviour isn8217t intuitive and at times they don8217t behave the way you may expect them to. This section will point out some of the most common pitfalls. Use String Methods Sometimes using the re module is a mistake. If you8217re matching a fixed string, or a single character class, and you8217re not using any re features such as the IGNORECASE flag, then the full power of regular expressions may not be required. Strings have several methods for performing operations with fixed strings and they8217re usually much faster, because the implementation is a single small C loop that8217s been optimized for the purpose, instead of the large, more generalized regular expression engine. One example might be replacing a single fixed string with another one for example, you might replace word with deed. re. sub() seems like the function to use for this, but consider the replace() method. Note that replace() will also replace word inside words, turning swordfish into sdeedfish. but the naive RE word would have done that, too. (To avoid performing the substitution on parts of words, the pattern would have to be bwordb. in order to require that word have a word boundary on either side. This takes the job beyond replace() 8216s abilities.) Another common task is deleting every occurrence of a single character from a string or replacing it with another single character. You might do this with something like re. sub(n, , S). but translate() is capable of doing both tasks and will be faster than any regular expression operation can be. In short, before turning to the re module, consider whether your problem can be solved with a faster and simpler string method. match() versus search() The match() function only checks if the RE matches at the beginning of the string while search() will scan forward through the string for a match. It8217s important to keep this distinction in mind. Remember, match() will only report a successful match which will start at 0 if the match wouldn8217t start at zero, match() will not report it. On the other hand, search() will scan forward through the string, reporting the first match it finds. Sometimes you8217ll be tempted to keep using re. match(). and just add . to the front of your RE. Resist this temptation and use re. search() instead. The regular expression compiler does some analysis of REs in order to speed up the process of looking for a match. One such analysis figures out what the first character of a match must be for example, a pattern starting with Crow must match starting with a C. The analysis lets the engine quickly scan through the string looking for the starting character, only trying the full match if a C is found. Adding . defeats this optimization, requiring scanning to the end of the string and then backtracking to find a match for the rest of the RE. Use re. search() instead. Greedy versus Non-Greedy When repeating a regular expression, as in a. the resulting action is to consume as much of the pattern as possible. This fact often bites you when you8217re trying to match a pair of balanced delimiters, such as the angle brackets surrounding an HTML tag. The naive pattern for matching a single HTML tag doesn8217t work because of the greedy nature of . । The RE matches the lt in lthtmlgt. and the . consumes the rest of the string. There8217s still more left in the RE, though, and the gt can8217t match at the end of the string, so the regular expression engine has to backtrack character by character until it finds a match for the gt. The final match extends from the lt in lthtmlgt to the gt in lttitlegt. which isn8217t what you want. In this case, the solution is to use the non-greedy qualifiers . । or . which match as little text as possible. In the above example, the gt is tried immediately after the first lt matches, and when it fails, the engine advances a character at a time, retrying the gt at every step. This produces just the right result: (Note that parsing HTML or XML with regular expressions is painful. Quick-and-dirty patterns will handle common cases, but HTML and XML have special cases that will break the obvious regular expression by the time you8217ve written a regular expression that handles all of the possible cases, the patterns will be very complicated. Use an HTML or XML parser module for such tasks.) Using re. VERBOSE By now you8217ve probably noticed that regular expressions are a very compact notation, but they8217re not terribly readable. REs of moderate complexity can become lengthy collections of backslashes, parentheses, and metacharacters, making them difficult to read and understand. For such REs, specifying the re. VERBOSE flag when compiling the regular expression can be helpful, because it allows you to format the regular expression more clearly. The re. VERBOSE flag has several effects. Whitespace in the regular expression that isn8217t inside a character class is ignored. This means that an expression such as dog cat is equivalent to the less readable dogcat. but a b will still match the characters a. ख। or a space. In addition, you can also put comments inside a RE comments extend from a character to the next newline. When used with triple-quoted strings, this enables REs to be formatted more neatly: This is far more readable than: Regular expressions are a complicated topic. Did this document help you understand them Were there parts that were unclear, or Problems you encountered that weren8217t covered here If so, please send suggestions for improvements to the author. The most complete book on regular expressions is almost certainly Jeffrey Friedl8217s Mastering Regular Expressions, published by O8217Reilly. Unfortunately, it exclusively concentrates on Perl and Java8217s flavours of regular expressions, and doesn8217t contain any Python material at all, so it won8217t be useful as a reference for programming in Python. (The first edition covered Python8217s now-removed regex module, which won8217t help you much.) Consider checking it out from your library. Introduced in Python 2.2.2.

No comments:

Post a Comment