जटिल RegEx सिंटैक्स के बिना पायथन स्ट्रिंग मिलान

जटिल RegEx सिंटैक्स के बिना पायथन स्ट्रिंग मिलान

स्रोत नोड: 1935271

जटिल RegEx सिंटैक्स के बिना पायथन स्ट्रिंग मिलान
लेखक द्वारा छवि
 

मेरा रेगुलर एक्सप्रेशन (RegEx) के साथ प्यार और नफरत का रिश्ता है, खासकर पायथन में। मुझे पसंद है कि आप कई तार्किक फ़ंक्शन लिखे बिना स्ट्रिंग्स को कैसे निकाल सकते हैं या मिलान कर सकते हैं। यह स्ट्रिंग सर्च फ़ंक्शन से भी बेहतर है। 

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

जटिल रेगेक्स कार्यों को सरल बनाने के लिए, हम एक सरल पायथन पैकेज के बारे में सीखेंगे जिसे कहा जाता है प्रीगेक्स. इसके अलावा, हम पाठ की लंबी श्रृंखला से दिनांक और ईमेल निकालने के कुछ उदाहरण भी देखेंगे।  

प्रीगेक्स `re` मॉड्यूल के शीर्ष पर निर्मित एक उच्च-स्तरीय API है। यह जटिल रेगेक्स पैटर्न के बिना एक रेगेक्स है जो किसी भी प्रोग्रामर के लिए नियमित अभिव्यक्तियों को समझना और याद रखना आसान बनाता है। इसके अलावा, आपको पैटर्न को समूहीकृत करने या मेटाचैक्टर से बचने की ज़रूरत नहीं है, और यह मॉड्यूलर है। 

आप बस पीआईपी का उपयोग करके लाइब्रेरी स्थापित कर सकते हैं।

pip install pregex

 

PRegEx की शक्तिशाली कार्यक्षमता का परीक्षण करने के लिए, हम संशोधित नमूना कोड का उपयोग करेंगे दस्तावेज़ीकरण

नीचे दिए गए उदाहरण में, हम या तो HTTP URL या पोर्ट नंबर के साथ IPv4 पता निकाल रहे हैं। हमें इसके लिए जटिल तर्क बनाने की जरूरत नहीं है. हम अंतर्निहित फ़ंक्शन `HttpUrl` और `IPv4` का उपयोग कर सकते हैं।

  1. AnyDigit() का उपयोग करके एक पोर्ट नंबर बनाएं। पोर्ट का पहला अंक शून्य नहीं होना चाहिए, और अगले तीन अंक कोई भी संख्या हो सकते हैं। 
  2. पोर्ट नंबर के साथ HTTP यूआरएल या आईपी एड्रेस निकालने के लिए एकाधिक तर्क जोड़ने के लिए या तो() का उपयोग करें। 
from pregex.core.pre import Pregex
from pregex.core.classes import AnyDigit
from pregex.core.operators import Either
from pregex.meta.essentials import HttpUrl, IPv4 port_number = (AnyDigit() - '0') + 3 * AnyDigit() pre = Either( HttpUrl(capture_domain=True, is_extensible=True), IPv4(is_extensible=True) + ':' + port_number
)

 

हम वर्णों और विवरणों के साथ पाठ की एक लंबी श्रृंखला का उपयोग करेंगे। 

text = """IPV4--192.168.1.1:8000-- address--https://www.abid.works-- website--https://kdnuggets.com--text"""

 

इससे पहले कि हम मिलान स्ट्रिंग निकालें, आइए रेगएक्स पैटर्न देखें। 

regex_pattren = pre.get_pattern()
print(regex_pattren)

 

उत्पादन

जैसा कि हम देख सकते हैं, यह पढ़ना या समझना भी कठिन है कि क्या हो रहा है। यहीं पर PRegEx चमकता है। जटिल नियमित अभिव्यक्ति कार्यों को करने के लिए आपको मानव-अनुकूल एपीआई प्रदान करना। 

(?:https?://)?(?:www.)?(?:[a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z].)*([a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z]).[a-z]{2,6}(?::d{1,4})?(?:/[!-.0-~]+)*/?(?:(?=[!-/[-`{-~:-@])|(?=w))|(?:(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])).){3}(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])):[1-9]d{3}

 

`re.match` की तरह, हम आवश्यक स्ट्रिंग निकालने के लिए `.get_matches(text)` का उपयोग करेंगे।

results = pre.get_matches(text)
print(results)

 

उत्पादन

हमने पोर्ट नंबर और दो वेब यूआरएल के साथ दोनों आईपी एड्रेस निकाल लिए हैं। 

['192.168.1.1:8000', 'https://www.abid.works', 'https://kdnuggets.com']

आइए कुछ उदाहरण देखें जहां हम PRegEx की पूरी क्षमता को समझ सकते हैं। 

इस उदाहरण में, हम नीचे दिए गए पाठ से कुछ प्रकार के दिनांक पैटर्न निकालेंगे।

text = """ 04-15-2023 2023-08-15 06-20-2023 06/24/2023 """

 

Exactly() और AnyDigit() का उपयोग करके, हम तारीख का दिन, महीना और वर्ष बनाएंगे। दिन और महीने में दो अंक होते हैं, जबकि वर्ष में 4 अंक होते हैं। वे "-" डैश द्वारा अलग किए गए हैं।

पैटर्न बनाने के बाद, हम मिलान स्ट्रिंग को निकालने के लिए `get_match` चलाएंगे। 

from pregex.core.classes import AnyDigit
from pregex.core.quantifiers import Exactly day_or_month = Exactly(AnyDigit(), 2) year = Exactly(AnyDigit(), 4) pre = ( day_or_month + "-" + day_or_month + "-" + year
) results = pre.get_matches(text)
print(results)

 

उत्पादन

['04-15-2023', '06-20-2023']

 

आइए `get_pattern()` फ़ंक्शन का उपयोग करके रेगेक्स पैटर्न को देखें। 

regex_pattren = pre.get_pattern()
print(regex_pattren)

 

उत्पादन

जैसा कि हम देख सकते हैं, इसमें एक सरल रेगेक्स सिंटैक्स है। 

d{2}-d{2}-d{4}

दूसरा उदाहरण थोड़ा जटिल है, जहां हम जंक टेक्स्ट से वैध ईमेल पते निकालेंगे। 

text = """ user1@abid.works editorial@@kdnuggets.com lover@python.gg. editorial1@kdnuggets.com """

 

  • बनाओ उपयोगकर्ता `OneOrMore()` के साथ पैटर्न। हम तर्क से "@" और स्पेस को हटाने के लिए `AnyButFrom()` का उपयोग करेंगे। 
  • एक के समान उपयोगकर्ता पैटर्न हम बनाते हैं कंपनी अतिरिक्त वर्ण "" को हटाकर पैटर्न। तर्क से.
  • के लिए डोमेन,  हम "@", स्पेस और पूर्ण विराम को छोड़कर किन्हीं दो या अधिक वर्णों के साथ अंत से खोज शुरू करने के लिए `MatchAtLineEnd()` का उपयोग करेंगे।  
  • अंतिम पैटर्न बनाने के लिए तीनों को मिलाएं: user@company.domain.
from pregex.core.classes import AnyButFrom
from pregex.core.quantifiers import OneOrMore, AtLeast
from pregex.core.assertions import MatchAtLineEnd user = OneOrMore(AnyButFrom("@", ' '))
company = OneOrMore(AnyButFrom("@", ' ', '.'))
domain = MatchAtLineEnd(AtLeast(AnyButFrom("@", ' ', '.'), 2)) pre = ( user + "@" + company + '.' + domain
) results = pre.get_matches(text)
print(results)

 

उत्पादन

जैसा कि हम देख सकते हैं, PRegEx ने दो वैध ईमेल पते की पहचान की है। 

['user1@abid.works', 'editorial1@kdnuggets.com']

 

नोट: दोनों कोड उदाहरण कार्य के संशोधित संस्करण हैं द पायकोच

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

इस मिनी ट्यूटोरियल में, हमने उदाहरणों के साथ पायथन पैकेज PRegEx और इसके उपयोग के मामलों के बारे में सीखा है। आप आधिकारिक पढ़कर अधिक जान सकते हैं दस्तावेज़ीकरण या हल करना a Wordle प्रोग्रामयोग्य रेगुलर एक्सप्रेशन का उपयोग करने में समस्या।

 
 
आबिद अली अवनी (@1अबिदलियावान) एक प्रमाणित डेटा वैज्ञानिक पेशेवर है जो मशीन लर्निंग मॉडल बनाना पसंद करता है। वर्तमान में, वह सामग्री निर्माण और मशीन लर्निंग और डेटा विज्ञान प्रौद्योगिकियों पर तकनीकी ब्लॉग लिखने पर ध्यान केंद्रित कर रहा है। आबिद के पास प्रौद्योगिकी प्रबंधन में मास्टर डिग्री और दूरसंचार इंजीनियरिंग में स्नातक की डिग्री है। उनका दृष्टिकोण मानसिक बीमारी से जूझ रहे छात्रों के लिए ग्राफ न्यूरल नेटवर्क का उपयोग करके एआई उत्पाद बनाना है।
 

समय टिकट:

से अधिक केडनगेट्स