Python 3 साठी Re मॉड्यूलसाठी दस्तऐवजीकरण. रेग्युलर एक्स्प्रेशनसाठी पुन्हा मॉड्यूल

नियमित अभिव्यक्ती जवळजवळ कोणत्याही प्रोग्रामिंग भाषेचा एक अतिशय लोकप्रिय घटक आहे. ते आपल्याला आवश्यक माहिती द्रुतपणे ऍक्सेस करण्यात मदत करतात. विशेषतः, जेव्हा मजकूरावर प्रक्रिया करणे आवश्यक असते तेव्हा ते वापरले जातात. पायथन बाय डीफॉल्ट एका विशेष मॉड्यूलसह ​​येतो. re, जे नियमित अभिव्यक्तीसह कार्य करण्यासाठी जबाबदार आहे.

आज आपण ते सर्वसाधारणपणे काय आहे, त्यांच्याबरोबर कसे कार्य करावे आणि मॉड्यूल कसे याबद्दल तपशीलवार चर्चा करू re मदत करेल.

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

रेग्युलर एक्स्प्रेशन्सचे उपयोग काय आहेत? जवळजवळ सर्वच. उदाहरणार्थ, हे:

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

आपण वाक्यरचना पार्स करणे सुरू करण्यापूर्वी, आपण लायब्ररीच्या कार्याची मूलभूत तत्त्वे अधिक तपशीलवार समजून घेतली पाहिजेत. re आणि सर्वसाधारणपणे, याबद्दल सामान्यतः काय चांगले आहे. आम्ही वास्तविक सरावातून उदाहरणे देखील देऊ, जिथे आम्ही त्यांच्या वापराच्या यंत्रणेचे वर्णन करू. तुम्ही असा टेम्प्लेट तयार करू शकता, तुमच्यासाठी मजकूरासह विविध प्रकारच्या ऑपरेशन्स करण्यासाठी योग्य आहे.

रे लायब्ररीमध्ये टेम्पलेट म्हणजे काय?

त्याद्वारे, इतर कार्ये अधिक अनुकूल करण्यासाठी, आपण विविध प्रकारची माहिती शोधू शकता, त्यांच्याशी संबंधित माहिती मिळवू शकता. आणि, अर्थातच, या डेटावर प्रक्रिया करण्यासाठी.

उदाहरणार्थ, खालील टेम्पलेट घ्या: s+. याचा अर्थ कोणताही स्पेस कॅरेक्टर. तुम्ही त्यात प्लस चिन्ह जोडल्यास, याचा अर्थ असा की पॅटर्नमध्ये एकापेक्षा जास्त जागा समाविष्ट आहेत. हे कॉल केलेल्या टॅब वर्णांशी देखील जुळवू शकते t+.

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

>>> पुन्हा आयात करा

>>> regex = re.compile('s+')

विशेषत:, हा कोड वापरता येणारे टेम्पलेट संकलित करण्याचे कार्य करते. उदाहरणार्थ, जागा शोधण्यासाठी (एक किंवा अधिक).

रेग्युलर एक्स्प्रेशन्स वापरून वेगवेगळ्या स्ट्रिंगमधून वेगळी माहिती मिळवणे

समजा आपल्याकडे खालील माहिती असलेले व्हेरिएबल आहे.

>>> मजकूर = “””100 INF माहितीशास्त्र

213 MAT गणित  

156 ENG इंग्रजी »»»

यात तीन प्रशिक्षण अभ्यासक्रम आहेत. त्या प्रत्येकामध्ये तीन भाग असतात - संख्या, कोड आणि नाव. आपण पाहतो की या शब्दांमधील अंतर भिन्न आहे. ही ओळ स्वतंत्र संख्या आणि शब्दांमध्ये मोडण्यासाठी काय करावे? हे लक्ष्य साध्य करण्यासाठी दोन पद्धती आहेत:

  1. फंक्शन कॉल करा पुन्हा विभाजन.
  2. कार्य लागू करा विभाजित करा साठी regex.

आमच्या व्हेरिएबलसाठी प्रत्येक पद्धतीचा वाक्यरचना वापरण्याचे येथे एक उदाहरण आहे.

>>> re.split('s+', मजकूर)  

# किंवा

>>> regex.split(मजकूर)

आउटपुट: ['100', 'INF', 'संगणक विज्ञान', '213', 'MAT', 'Math', '156', 'ENG', 'इंग्रजी']

सर्वसाधारणपणे, दोन्ही पद्धती वापरल्या जाऊ शकतात. परंतु फंक्शन अनेक वेळा वापरण्याऐवजी रेग्युलर एक्सप्रेशन वापरणे खरोखर खूप सोपे आहे. पुन्हा विभाजन.

तीन फंक्शन्ससह जुळण्या शोधणे

समजा आपल्याला स्ट्रिंगमधून फक्त संख्या काढायची आहेत. यासाठी काय करावे लागेल?

re.findall()

फंक्शनसाठी येथे एक वापर केस आहे findall(), जे, रेग्युलर एक्सप्रेशन्ससह, तुम्हाला टेक्स्ट व्हेरिएबलमधून एक किंवा अधिक संख्यांच्या घटना काढण्याची परवानगी देते.

>>> प्रिंट (मजकूर)  

100 INF माहितीशास्त्र

213 MAT गणित  

156 ENG इंग्रजी

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

>>> regex_num.findall(मजकूर)  

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

d चिन्हासह, आम्ही एक टेम्प्लेट वापरला जे व्हेरिएबल किंवा मजकूरात असलेले कोणतेही संख्यात्मक मूल्य दर्शवते. आणि आम्ही तेथे एक + जोडल्यामुळे, याचा अर्थ किमान एक संख्या असणे आवश्यक आहे. 

जुळणी शोधण्यासाठी अंकाची उपस्थिती आवश्यक नाही हे निर्दिष्ट करण्यासाठी तुम्ही * चिन्ह देखील वापरू शकता.

पण आमच्या बाबतीत, आम्ही + वापरले असल्याने, आम्ही सह काढले findall() मजकूरातील अभ्यासक्रमांचे 1 किंवा अधिक डिजिटल पदनाम. अशा प्रकारे, आमच्या बाबतीत, नियमित अभिव्यक्ती फंक्शनसाठी सेटिंग्ज म्हणून कार्य करतात.

re.search() वि re.match()

फंक्शन्सच्या नावावरून तुम्ही अंदाज लावू शकता, प्रथम मजकूरातील जुळणी शोधते. प्रश्न: यातील फरक काय आहे findall? मुद्दा असा आहे की तो नमुन्याशी जुळणारा विशिष्ट ऑब्जेक्ट परत करतो, मागील फंक्शनप्रमाणे यादीच्या स्वरूपात सापडलेल्या परिणामांचा संपूर्ण क्रम नाही.

या बदल्यात, re.match फंक्शन तेच करते. फक्त वाक्यरचना वेगळी आहे. टेम्पलेट सुरुवातीला ठेवले पाहिजे. 

हे दाखवणारे उदाहरण घेऊ.

>>> # टेक्स्टसह व्हेरिएबल तयार करा

>>> text2 = «»»INF माहितीशास्त्र

213 MAT गणित 156″»»  

>>> # regex संकलित करा आणि नमुने शोधा

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

>>> s = regex_num.search(text2)  

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

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

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

पहिला निर्देशांक: १७ 

शेवटचा निर्देशांक: २०

213

जर तुम्हाला समान परिणाम वेगळ्या प्रकारे मिळवायचा असेल तर तुम्ही फंक्शन वापरू शकता गट().

मजकूराचा भाग Re लायब्ररीसह बदलत आहे

मजकूर बदलण्यासाठी, फंक्शन वापरा re.sub(). समजा आमच्या अभ्यासक्रमांची यादी थोडी बदलली आहे. आपण पाहतो की प्रत्येक डिजिटल मूल्यानंतर आपल्याकडे एक टॅब असतो. हा सर्व क्रम एका ओळीत एकत्र करणे हे आमचे कार्य आहे. हे करण्यासाठी, आपल्याला s+ ही अभिव्यक्ती पुनर्स्थित करणे आवश्यक आहे पास 

मूळ मजकूर होता:

# मजकूरासह व्हेरिएबल तयार करा

>>> मजकूर = “””100 INF t माहितीशास्त्र

213 MAT t गणित  

156 ENG t इंग्रजी»»»  

>>> प्रिंट (मजकूर)  

100 माहिती संगणक विज्ञान

213 MAT गणित  

156 ENG इंग्रजी

इच्छित ऑपरेशन करण्यासाठी, आम्ही कोडच्या खालील ओळी वापरल्या.

# एक किंवा अधिक स्पेस 1 ने बदला

>>> regex = re.compile('s+')  

>>> प्रिंट(regex.sub(' ', मजकूर))  

परिणामी, आमच्याकडे एक ओळ आहे. 

101 COM संगणक 205 MAT गणित 189 ENG इंग्रजी

आता दुसरी समस्या विचारात घ्या. मोकळ्या जागा टाकण्याचे काम आम्हाला भेडसावत नाही. आमच्यासाठी सर्व अभ्यासक्रमांची नावे नवीन ओळीवर सुरू होणे अधिक महत्त्वाचे आहे. हे करण्यासाठी, दुसरी अभिव्यक्ती वापरली जाते जी अपवादासाठी नवीन ओळ जोडते. हे कोणत्या प्रकारचे अभिव्यक्ती आहे?

ग्रंथालय Re नकारात्मक जुळणीसारख्या वैशिष्ट्यास समर्थन देते. हे थेट पेक्षा वेगळे आहे कारण त्यात स्लॅशच्या आधी उद्गारवाचक बिंदू आहे. म्हणजेच, जर आपल्याला नवीन ओळीचे अक्षर वगळायचे असेल तर आपल्याला n ऐवजी !n लिहावे लागेल.

आम्हाला खालील कोड मिळतो.

# नवीन लाइन वगळता सर्व जागा काढून टाका  

>>> regex = re.compile('((?!n)s+)')  

>>> प्रिंट(regex.sub(' ', मजकूर))  

100 INF माहितीशास्त्र

213 MAT गणित  

156 ENG इंग्रजी

नियमित अभिव्यक्ती गट काय आहेत?

रेग्युलर एक्स्प्रेशन्सच्या गटांच्या मदतीने, आपण एका ओळीत नव्हे तर वेगळ्या घटकांच्या स्वरूपात इच्छित वस्तू मिळवू शकतो. 

समजा आपल्याला कोर्स नंबर, कोड आणि नाव एका ओळीत नाही तर वेगळे घटक म्हणून मिळवायचे आहे. कार्य पूर्ण करण्यासाठी, आपल्याला कोडच्या मोठ्या संख्येने अनावश्यक ओळी लिहिण्याची आवश्यकता असेल. 

खरं तर, कार्य मोठ्या प्रमाणात सुलभ केले जाऊ शकते. तुम्ही सर्व नोंदींसाठी टेम्पलेट संकलित करू शकता आणि तुम्हाला कंसातून मिळवण्यासाठी आवश्यक असलेला डेटा निर्दिष्ट करू शकता.

ओळींची संख्या खूपच कमी असेल. 

# कोर्स टेक्स्ट टेम्प्लेट्सचे गट तयार करा आणि ते काढा

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

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'संगणक विज्ञान'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'इंग्रजी')]

"लोभी" जुळणीची संकल्पना

मानकानुसार, रेग्युलर एक्सप्रेशन्स जास्तीत जास्त जुळणारा डेटा काढण्यासाठी प्रोग्राम केले जातात. आणि जरी तुम्हाला खूप कमी गरज असेल.

चला एक नमुना HTML कोड पाहू जिथे आपल्याला टॅग मिळणे आवश्यक आहे.

>>> मजकूर = "लोभी रेग्युलर एक्स्प्रेशन मॅचिंगचे उदाहरण"  

>>> re.findall('', मजकूर)  

['लोभी रेग्युलर एक्स्प्रेशन मॅचिंगचे उदाहरण']

फक्त एक टॅग काढण्याऐवजी, पायथनला संपूर्ण स्ट्रिंग मिळाली. म्हणून त्याला लोभी असे म्हणतात.

आणि फक्त टॅग मिळविण्यासाठी काय करावे? या प्रकरणात, आपल्याला आळशी जुळणी वापरण्याची आवश्यकता आहे. अशी अभिव्यक्ती निर्दिष्ट करण्यासाठी, नमुनाच्या शेवटी एक प्रश्नचिन्ह जोडले आहे.

तुम्हाला खालील कोड आणि दुभाष्याचे आउटपुट मिळेल.

>>> re.findall('', मजकूर)  

[”, ”]

जर फक्त प्रथम समोर आलेली घटना प्राप्त करणे आवश्यक असेल तर पद्धत वापरली जाते शोधा ().

re.search(', text).group()  

"

त्यानंतर फक्त ओपनिंग टॅग सापडेल.

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

येथे सर्वात सामान्यपणे वापरल्या जाणार्‍या नियमित अभिव्यक्ती नमुन्यांची एक सारणी आहे.

Python 3 साठी Re मॉड्यूलसाठी दस्तऐवजीकरण. रेग्युलर एक्स्प्रेशनसाठी पुन्हा मॉड्यूल

निष्कर्ष

आम्ही नियमित अभिव्यक्तीसह कार्य करण्यासाठी फक्त सर्वात मूलभूत पद्धतींचा विचार केला आहे. कोणत्याही परिस्थितीत, ते किती महत्त्वाचे आहेत हे तुम्ही पाहिले आहे. आणि येथे संपूर्ण मजकूर किंवा त्याच्या वैयक्तिक तुकड्यांचे विश्लेषण करणे आवश्यक आहे की नाही, सोशल नेटवर्कवरील पोस्टचे विश्लेषण करणे आवश्यक आहे किंवा नंतर त्यावर प्रक्रिया करण्यासाठी डेटा गोळा करणे आवश्यक आहे की नाही हे काही फरक पडत नाही. या प्रकरणात नियमित अभिव्यक्ती एक विश्वासार्ह सहाय्यक आहेत.

ते आपल्याला कार्ये करण्यास परवानगी देतात जसे की:

  1. डेटाचे स्वरूप निर्दिष्ट करणे, जसे की ईमेल पत्ता किंवा फोन नंबर.
  2. एक स्ट्रिंग मिळवणे आणि त्यास अनेक लहान स्ट्रिंगमध्ये विभाजित करणे.
  3. मजकूरासह विविध ऑपरेशन्स करा, जसे की शोधणे, आवश्यक माहिती काढणे किंवा वर्णांचा भाग बदलणे.

रेग्युलर एक्स्प्रेशन्स तुम्हाला क्षुल्लक नसलेली ऑपरेशन्स करण्याची परवानगी देतात. पहिल्या दृष्टीक्षेपात, या विज्ञानात प्रभुत्व मिळवणे सोपे नाही. परंतु सराव मध्ये, सर्वकाही प्रमाणित आहे, म्हणून एकदा ते शोधणे पुरेसे आहे, त्यानंतर हे साधन केवळ पायथनमध्येच नाही तर इतर कोणत्याही प्रोग्रामिंग भाषेत देखील वापरले जाऊ शकते. अगदी एक्सेल डेटा प्रोसेसिंग स्वयंचलित करण्यासाठी नियमित अभिव्यक्ती वापरते. त्यामुळे हे साधन न वापरणे हे पाप आहे.

प्रत्युत्तर द्या