NET में पायथन 3 के लिए पुन: मॉड्यूल के लिए दस्तावेज़ीकरण। रेगुलर एक्सप्रेशन के लिए पुन: मॉड्यूल

नियमित अभिव्यक्ति लगभग किसी भी प्रोग्रामिंग भाषा का एक बहुत ही लोकप्रिय घटक है। वे आपकी आवश्यक जानकारी तक शीघ्रता से पहुँचने में आपकी सहायता करते हैं। विशेष रूप से, उनका उपयोग तब किया जाता है जब पाठ को संसाधित करना आवश्यक होता है। पायथन डिफ़ॉल्ट रूप से एक विशेष मॉड्यूल के साथ आता है। re, जो नियमित अभिव्यक्तियों के साथ काम करने के लिए जिम्मेदार है।

आज हम विस्तार से बात करेंगे कि यह सामान्य रूप से क्या है, उनके साथ कैसे काम करना है और मॉड्यूल कैसे है re मदद करेगा।

नियमित अभिव्यक्ति: एक परिचय

रेगुलर एक्सप्रेशन के उपयोग क्या हैं? लगभग सभी। उदाहरण के लिए, ये:

  1. वेब एप्लिकेशन जिन्हें टेक्स्ट सत्यापन की आवश्यकता होती है। एक विशिष्ट उदाहरण ऑनलाइन मेल क्लाइंट हैं।
  2. ग्रंथों, डेटाबेस आदि से संबंधित कोई अन्य परियोजना।

इससे पहले कि हम वाक्य रचना को पार्स करना शुरू करें, हमें पुस्तकालय के कामकाज के बुनियादी सिद्धांतों को और अधिक विस्तार से समझना चाहिए re और सामान्य तौर पर, इसके बारे में आम तौर पर क्या अच्छा है। हम वास्तविक अभ्यास से उदाहरण भी देंगे, जहां हम उनके उपयोग के तंत्र का वर्णन करेंगे। आप ऐसा टेम्प्लेट बना सकते हैं, जो टेक्स्ट के साथ कई तरह के ऑपरेशन करने के लिए आपके लिए उपयुक्त हो।

री लाइब्रेरी में टेम्प्लेट क्या है?

इसके साथ, आप अन्य कार्यों को अधिक अनुकूल बनाने के लिए विभिन्न प्रकार की जानकारी खोज सकते हैं, उनसे संबंधित जानकारी प्राप्त कर सकते हैं। और, ज़ाहिर है, इस डेटा को संसाधित करने के लिए।

उदाहरण के लिए, निम्न टेम्पलेट लें: s+. इसका मतलब है कोई भी स्पेस कैरेक्टर। यदि आप इसमें धन का चिह्न जोड़ते हैं, तो इसका अर्थ है कि पैटर्न में एक से अधिक स्थान शामिल हैं। यह उन टैब वर्णों से भी मेल खा सकता है जिन्हें with . कहा जाता है t+.

उनका उपयोग करने से पहले, आपको पुस्तकालय आयात करने की आवश्यकता है Re. उसके बाद, हम टेम्पलेट को संकलित करने के लिए एक विशेष कमांड का उपयोग करते हैं। यह दो चरणों में किया जाता है।

>>> फिर से आयात करें

>>> रेगेक्स = re.compile('s+')

विशेष रूप से, यह कोड एक टेम्पलेट को संकलित करने का कार्य करता है जिसका उपयोग किया जा सकता है। उदाहरण के लिए, रिक्त स्थान (एक या अधिक) खोजने के लिए।

रेगुलर एक्सप्रेशन का उपयोग करके विभिन्न स्ट्रिंग्स से अलग जानकारी प्राप्त करना

मान लीजिए कि हमारे पास एक चर है जिसमें निम्नलिखित जानकारी है।

>>> टेक्स्ट = """100 INF सूचना विज्ञान

213 एमएटी गणित  

156 अंग्रेजी अंग्रेजी»»»

इसमें तीन प्रशिक्षण पाठ्यक्रम शामिल हैं। उनमें से प्रत्येक में तीन भाग होते हैं - संख्या, कोड और नाम। हम देखते हैं कि इन शब्दों के बीच का अंतराल अलग है। इस लाइन को अलग-अलग नंबरों और शब्दों में तोड़ने के लिए क्या करना चाहिए? इस लक्ष्य को प्राप्त करने के दो तरीके हैं:

  1. एक समारोह को बुलाओ पुन: विभाजित.
  2. समारोह लागू करें विभाजित एसटी regex.

हमारे चर के लिए प्रत्येक विधि के सिंटैक्स का उपयोग करने का एक उदाहरण यहां दिया गया है।

>>> re.split('s+', text)  

# या

>>> regex.split (पाठ)

आउटपुट: ['100', 'INF', 'कंप्यूटर साइंस', '213', 'MAT', 'Math', '156', 'ENG', 'English']

सामान्य तौर पर, दोनों विधियों का उपयोग किया जा सकता है। लेकिन कई बार फ़ंक्शन का उपयोग करने के बजाय नियमित अभिव्यक्ति का उपयोग करना वास्तव में बहुत आसान है। पुन: विभाजित.

तीन कार्यों के साथ मिलान ढूँढना

मान लीजिए कि हमें एक स्ट्रिंग से केवल संख्याएँ निकालने की आवश्यकता है। इसके लिए क्या करने की जरूरत है?

पुनः ढूँढें ()

यहाँ फ़ंक्शन के लिए उपयोग का मामला है सब ढूँढ़ो(), जो, रेगुलर एक्सप्रेशन के साथ, आपको टेक्स्ट वेरिएबल से एक या अधिक संख्याओं की घटनाओं को निकालने की अनुमति देता है।

>>> प्रिंट (पाठ)  

100 आईएनएफ सूचना विज्ञान

213 एमएटी गणित  

156 इंग्लैंड अंग्रेजी

>>> regex_num = re.compile('d+')  

>>> regex_num.findall (पाठ)  

['100', '213', '156']

d प्रतीक के साथ, हमने एक टेम्पलेट का उपयोग किया जो एक चर या पाठ में स्थित किसी भी संख्यात्मक मान को इंगित करता है। और चूंकि हमने वहां एक + जोड़ा है, इसका मतलब है कि कम से कम एक नंबर मौजूद होना चाहिए। 

आप यह निर्दिष्ट करने के लिए * चिह्न का उपयोग भी कर सकते हैं कि मिलान खोजने के लिए किसी अंक की उपस्थिति की आवश्यकता नहीं है।

लेकिन हमारे मामले में, चूंकि हमने + का उपयोग किया है, इसलिए हमने के साथ निकाला है सब ढूँढ़ो() पाठ से पाठ्यक्रमों के 1 या अधिक डिजिटल पदनाम। इस प्रकार, हमारे मामले में, नियमित अभिव्यक्ति फ़ंक्शन के लिए सेटिंग्स के रूप में कार्य करती है।

पुनः खोज () बनाम पुनः मिलान ()

जैसा कि आप फ़ंक्शंस के नाम से अनुमान लगा सकते हैं, पहले टेक्स्ट में एक मैच की खोज होती है। प्रश्न: में क्या अंतर है? सब ढूँढ़ो? मुद्दा यह है कि यह एक विशिष्ट वस्तु देता है जो पैटर्न से मेल खाता है, न कि पिछले फ़ंक्शन की तरह सूची के रूप में पाए गए परिणामों का संपूर्ण अनुक्रम।

बदले में, re.match फ़ंक्शन वही करता है। केवल वाक्यविन्यास अलग है। टेम्पलेट को शुरुआत में रखा जाना चाहिए। 

आइए एक उदाहरण लेते हैं जो इसे प्रदर्शित करता है।

>>> # टेक्स्ट के साथ एक वेरिएबल बनाएं

>>> text2 = «»»INF सूचना विज्ञान

213 MAT गणित 156″»»  

>>> # रेगेक्स संकलित करें और पैटर्न देखें

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> प्रिंट ('पहला सूचकांक:', s.start ())  

>>> प्रिंट ('अंतिम अनुक्रमणिका:', s.end ())  

>>> प्रिंट (text2 [s.start (): s.end ()]) 

पहला सूचकांक: 17 

अंतिम सूचकांक: 20

213

यदि आप एक समान परिणाम एक अलग तरीके से प्राप्त करना चाहते हैं, तो आप फ़ंक्शन का उपयोग कर सकते हैं समूह().

पाठ के भाग को री लाइब्रेरी से बदलना

टेक्स्ट को बदलने के लिए, फ़ंक्शन का उपयोग करें पुनः उप ()। मान लीजिए हमारे पाठ्यक्रमों की सूची थोड़ी बदल गई है। हम देखते हैं कि प्रत्येक डिजिटल वैल्यू के बाद हमारे पास एक टैब होता है। हमारा काम इस सारे क्रम को एक लाइन में मिलाना है। ऐसा करने के लिए, हमें अभिव्यक्ति s+ . को प्रतिस्थापित करने की आवश्यकता है पारित करने के लिए 

मूल पाठ था:

# टेक्स्ट के साथ एक वेरिएबल बनाएं

>>> टेक्स्ट = """100 INF t सूचना विज्ञान

213 एमएटी टी मठ  

156 ENG t English»»»»  

>>> प्रिंट (पाठ)  

100 जानकारी कंप्यूटर विज्ञान

213 एमएटी गणित  

156 एएनजी अंग्रेज़ी

वांछित ऑपरेशन करने के लिए, हमने कोड की निम्नलिखित पंक्तियों का उपयोग किया।

# एक या अधिक रिक्त स्थान को 1 . से बदलें

>>> रेगेक्स = re.compile('s+')  

>>> प्रिंट (regex.sub ('', टेक्स्ट))  

नतीजतन, हमारे पास एक पंक्ति है। 

101 COM कंप्यूटर 205 MAT गणित 189 ENG अंग्रेजी

अब एक और समस्या पर विचार करें। हमें रिक्त स्थान लगाने के कार्य का सामना नहीं करना पड़ रहा है। हमारे लिए यह बहुत अधिक महत्वपूर्ण है कि सभी कोर्स के नाम एक नई लाइन पर शुरू हों। ऐसा करने के लिए, एक अन्य अभिव्यक्ति का उपयोग किया जाता है जो अपवाद में एक नई पंक्ति जोड़ता है। यह कैसी अभिव्यक्ति है?

पुस्तकालय Re नकारात्मक मिलान जैसी सुविधा का समर्थन करता है। यह प्रत्यक्ष से भिन्न होता है क्योंकि इसमें स्लैश से पहले विस्मयादिबोधक बिंदु होता है। यानी, अगर हमें न्यूलाइन कैरेक्टर को छोड़ना है, तो हमें n के बजाय !n लिखना होगा।

हमें निम्नलिखित कोड मिलता है।

# न्यूलाइन को छोड़कर सभी रिक्त स्थान हटाएं  

>>> रेगेक्स = re.compile('((?!n)s+)')  

>>> प्रिंट (regex.sub ('', टेक्स्ट))  

100 आईएनएफ सूचना विज्ञान

213 एमएटी गणित  

156 इंग्लैंड अंग्रेजी

रेगुलर एक्सप्रेशन समूह क्या हैं?

नियमित अभिव्यक्तियों के समूहों की सहायता से, हम वांछित वस्तुओं को अलग-अलग तत्वों के रूप में प्राप्त कर सकते हैं, न कि एक पंक्ति में। 

मान लीजिए कि हमें पाठ्यक्रम संख्या, कोड और नाम एक पंक्ति में नहीं, बल्कि अलग-अलग तत्वों के रूप में प्राप्त करने की आवश्यकता है। कार्य को पूरा करने के लिए, आपको बड़ी संख्या में कोड की अनावश्यक पंक्तियाँ लिखनी होंगी। 

वास्तव में, कार्य को बहुत सरल किया जा सकता है। आप सभी प्रविष्टियों के लिए टेम्पलेट संकलित कर सकते हैं और केवल उस डेटा को निर्दिष्ट कर सकते हैं जिसे आपको कोष्ठक से प्राप्त करने की आवश्यकता है।

बहुत कम संख्या में लाइनें होंगी। 

# पाठ्यक्रम टेक्स्ट टेम्प्लेट के समूह बनाएं और उन्हें निकालें

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall (कोर्स_पैटर्न, टेक्स्ट)  

[('100', 'INF', 'कंप्यूटर साइंस'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

"लालची" मिलान की अवधारणा

मानक के अनुसार, मिलान डेटा की अधिकतम मात्रा निकालने के लिए नियमित अभिव्यक्तियों को प्रोग्राम किया जाता है। और भले ही आपको बहुत कम चाहिए।

आइए एक नमूना HTML कोड देखें जहां हमें टैग प्राप्त करने की आवश्यकता है।

>>> टेक्स्ट = "लालची नियमित अभिव्यक्ति मिलान का उदाहरण"  

>>> re.findall ('', पाठ)  

['लालची नियमित अभिव्यक्ति मिलान का उदाहरण']

सिर्फ एक टैग निकालने के बजाय, पायथन को पूरी स्ट्रिंग मिल गई। इसलिए इसे लोभी कहा जाता है।

और सिर्फ टैग पाने के लिए क्या करना चाहिए? इस मामले में, आपको आलसी मिलान का उपयोग करने की आवश्यकता है। ऐसे व्यंजक को निर्दिष्ट करने के लिए, पैटर्न के अंत में एक प्रश्न चिह्न जोड़ा जाता है।

आपको निम्न कोड और दुभाषिया का आउटपुट मिलेगा।

>>> re.findall ('', पाठ)  

[", "]

यदि केवल पहली बार हुई घटना को प्राप्त करना आवश्यक है, तो विधि का उपयोग किया जाता है तलाशी ().

पुनः खोज ('', पाठ)। समूह ()  

"

उसके बाद ही ओपनिंग टैग मिलेगा।

लोकप्रिय अभिव्यक्ति टेम्पलेट्स

यहां एक तालिका है जिसमें सबसे अधिक इस्तेमाल किया जाने वाला नियमित अभिव्यक्ति पैटर्न है।

NET में पायथन 3 के लिए पुन: मॉड्यूल के लिए दस्तावेज़ीकरण। रेगुलर एक्सप्रेशन के लिए पुन: मॉड्यूल

निष्कर्ष

हमने नियमित अभिव्यक्तियों के साथ काम करने के लिए केवल सबसे बुनियादी तरीकों पर विचार किया है। किसी भी मामले में, आपने देखा है कि वे कितने महत्वपूर्ण हैं। और यहां इससे कोई फर्क नहीं पड़ता कि क्या पूरे पाठ या उसके अलग-अलग अंशों को पार्स करना आवश्यक है, चाहे सोशल नेटवर्क पर किसी पोस्ट का विश्लेषण करना आवश्यक हो या बाद में इसे संसाधित करने के लिए डेटा एकत्र करना आवश्यक हो। इस मामले में नियमित अभिव्यक्ति एक विश्वसनीय सहायक है।

वे आपको ऐसे कार्य करने की अनुमति देते हैं जैसे:

  1. डेटा का प्रारूप निर्दिष्ट करना, जैसे ईमेल पता या फ़ोन नंबर।
  2. एक स्ट्रिंग प्राप्त करना और इसे कई छोटे स्ट्रिंग्स में विभाजित करना।
  3. टेक्स्ट के साथ विभिन्न ऑपरेशन करें, जैसे खोजना, आवश्यक जानकारी निकालना, या पात्रों के हिस्से को बदलना।

नियमित अभिव्यक्ति आपको गैर-तुच्छ संचालन करने की अनुमति भी देती है। पहली नज़र में, इस विज्ञान में महारत हासिल करना आसान नहीं है। लेकिन व्यवहार में, सब कुछ मानकीकृत है, इसलिए यह एक बार पता लगाने के लिए पर्याप्त है, जिसके बाद इस उपकरण का उपयोग न केवल पायथन में किया जा सकता है, बल्कि किसी अन्य प्रोग्रामिंग भाषा में भी किया जा सकता है। यहां तक ​​कि एक्सेल डेटा प्रोसेसिंग को स्वचालित करने के लिए नियमित अभिव्यक्तियों का उपयोग करता है। तो इस उपकरण का उपयोग न करना पाप है।

एक जवाब लिखें