Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में Regex के साथ पैटर्न मिलान


नियमित अभिव्यक्ति क्या है?

वास्तविक दुनिया में, अधिकांश प्रोग्रामिंग भाषाओं में स्ट्रिंग पार्सिंग को नियमित अभिव्यक्ति द्वारा नियंत्रित किया जाता है। Python प्रोग्रामिंग भाषा में नियमित अभिव्यक्ति टेक्स्ट पैटर्न मिलान के लिए उपयोग की जाने वाली एक विधि है।

"re" मॉड्यूल जो हर Python इंस्टॉलेशन के साथ आता है, नियमित अभिव्यक्ति समर्थन प्रदान करता है।

Python में, एक नियमित अभिव्यक्ति खोज आमतौर पर इस प्रकार लिखी जाती है:

match = re.search(pattern, string)

re.search() विधि दो तर्क लेती है, एक नियमित अभिव्यक्ति पैटर्न और एक स्ट्रिंग, और उस पैटर्न को स्ट्रिंग के भीतर खोजती है। यदि पैटर्न स्ट्रिंग के भीतर पाया जाता है, तो search() एक मैच ऑब्जेक्ट लौटाता है या अन्यथा None। तो एक नियमित अभिव्यक्ति में, दी गई एक स्ट्रिंग, यह निर्धारित करें कि क्या वह स्ट्रिंग किसी दिए गए पैटर्न से मेल खाती है, और वैकल्पिक रूप से, प्रासंगिक जानकारी वाले उपस्ट्रिंग एकत्र करें। एक नियमित अभिव्यक्ति का उपयोग निम्न जैसे सवालों के जवाब देने के लिए किया जा सकता है -

  • क्या यह स्ट्रिंग एक वैध URL है?

  • /etc/passwd में कौन से उपयोगकर्ता किसी दिए गए समूह में हैं?

  • लॉग फ़ाइल में सभी चेतावनी संदेशों की तारीख और समय क्या है?

  • किस यूज़रनेम और डॉक्यूमेंट का अनुरोध विज़िटर द्वारा टाइप किए गए URL द्वारा किया गया था?

पैटर्न मिलान

नियमित अभिव्यक्तियाँ जटिल मिनी-भाषाएँ हैं। वे अज्ञात स्ट्रिंग्स से मिलान करने के लिए विशेष वर्णों पर भरोसा करती हैं, लेकिन आइए लिटरल वर्णों से शुरू करते हैं, जैसे अक्षर, संख्याएँ और स्पेस वर्ण, जो हमेशा स्वयं से मेल खाते हैं। आइए एक बुनियादी उदाहरण देखें:

# नियमित अभिव्यक्ति के लिए 're' मॉड्यूल चाहिए
import re

# search_string = "TutorialsPoint"
pattern = "Tutorials"
match = re.match(pattern, search_string)

# search() के बाद if-statement परीक्षण करता है कि क्या यह सफल हुआ
if match:
    print("regex matches: ", match.group())
else:
    print('pattern not found')

परिणाम

regex matches: Tutorials

स्ट्रिंग मिलान

Python के "re" मॉड्यूल में कई विधियाँ हैं, और यह जांचने के लिए कि क्या कोई विशेष नियमित अभिव्यक्ति किसी विशिष्ट स्ट्रिंग से मेल खाती है, आप re.search() का उपयोग कर सकते हैं। re.MatchObject अतिरिक्त जानकारी प्रदान करता है जैसे स्ट्रिंग का कौन सा भाग मैच पाया गया था।

सिंटैक्स

matchObject = re.search(pattern, input_string, flags=0)

उदाहरण

# नियमित अभिव्यक्ति के लिए 're' मॉड्यूल चाहिए
import re

# आइए एक नियमित अभिव्यक्ति का उपयोग करके डेट स्ट्रिंग से मिलान करें।
regex = r"([a-zA-Z]+) (\d+)"

if re.search(regex, "Jan 2"):
    match = re.search(regex, "Jan 2")
    # यह [0, 5) प्रिंट करेगा, क्योंकि यह शुरुआत और अंत में मेल खाता है
    # स्ट्रिंग का
    print("Match at index %s, %s" % (match.start(), match.end()))
    # समूहों में मिलान मान होते हैं। विशेष रूप से:
    # match.group(0) हमेशा पूरी तरह से मिलान की गई स्ट्रिंग लौटाता है
    # match.group(1), match.group(2), ... इनपुट स्ट्रिंग में बाएं से दाएं क्रम में कैप्चर
    # समूहों को लौटाएंगे
    # match.group() match.group(0) के बराबर है
    # तो यह "Jan 2" प्रिंट करेगा
    print("Full match: %s" % (match.group(0)))
    # तो यह "Jan" प्रिंट करेगा
    print("Month: %s" % (match.group(1)))
    # तो यह "2" प्रिंट करेगा
    print("Day: %s" % (match.group(2)))
else:
    # यदि re.search() मेल नहीं खाता है, तो None लौटाया जाता है
    print("Pattern not Found! ")

परिणाम

Match at index 0, 5
Full match: Jan 2
Month: Jan
Day: 2

चूंकि उपरोक्त विधि पहले मैच के बाद रुक जाती है, इसलिए यह डेटा निकालने के बजाय नियमित अभिव्यक्ति का परीक्षण करने के लिए बेहतर अनुकूल है।

कैप्चरिंग ग्रुप

यदि पैटर्न में दो या अधिक पैरेंथेसिस शामिल हैं, तो अंतिम परिणाम स्ट्रिंग की सूची के बजाय एक टपल होगा, पैरेंथेसिस () ग्रुप मैकेनिज्म और finall() की मदद से। प्रत्येक पैटर्न मिलान को एक टपल द्वारा दर्शाया जाता है और प्रत्येक टपल में group(1), group(2).. डेटा होता है।

import re
regex = r'([\w\.-]+)@([\w\.-]+)'
str = ('hello john@hotmail.com, hello@Tutorialspoint.com, hello python@gmail.com')
matches = re.findall(regex, str)
print(matches)
for tuple in matches:
    print("Username: ", tuple[0]) # यूज़रनेम
    print("Host: ", tuple[1]) # होस्ट

परिणाम

[('john', 'hotmail.com'), ('hello', 'Tutorialspoint.com'), ('python', 'gmail.com')]
Username: john
Host: hotmail.com
Username: hello
Host: Tutorialspoint.com
Username: python
Host: gmail.com

स्ट्रिंग ढूंढना और बदलना

एक और सामान्य कार्य है दिए गए स्ट्रिंग में पैटर्न के सभी उदाहरणों को खोजना और उन्हें बदलना, re.sub(pattern, replacement, string) ठीक यही करेगा। उदाहरण के लिए, पुराने ईमेल डोमेन के सभी उदाहरणों को बदलने के लिए

कोड

# आवश्यक लाइब्रेरी
import re

# दी गई स्ट्रिंग
str = ('hello john@hotmail.com, hello@Tutorialspoint.com, hello python@gmail.com, Hello World!')

# मिलान करने का पैटर्न
pattern = r'([\w\.-]+)@([\w\.-]+)'

# स्ट्रिंग से मिलान पैटर्न को बदलें, 
replace = r'\1@XYZ.com'
## re.sub(pat, replacement, str) -- सभी प्रतिस्थापन के साथ नई स्ट्रिंग लौटाता है,
## \1 group(1) है, \2 प्रतिस्थापन में group(2)
print(re.sub(pattern, replace, str))

परिणाम

hello john@XYZ.com, hello@XYZ.com, hello python@XYZ.com, Hello World!

Re विकल्प फ्लैग

उपरोक्त की तरह Python नियमित अभिव्यक्ति में, हम पैटर्न मिलान के व्यवहार को संशोधित करने के लिए विभिन्न विकल्पों का उपयोग कर सकते हैं। ये अतिरिक्त तर्क, वैकल्पिक फ्लैग को search() या findall() आदि फ़ंक्शन में जोड़ा जाता है, उदाहरण के लिए re.search(pattern, string, re.IGNORECASE)।

  • IGNORECASE -

    जैसा कि नाम से संकेत मिलता है, यह पैटर्न को केस असंवेदनशील (अपरकेस/लोअरकेस) बनाता है, इसके साथ, 'a' और 'A' दोनों वाली स्ट्रिंग्स मेल खाती हैं।

  • DOTALL

    re.DOTALL डॉट (.) मेटाकैरेक्टर को नई लाइन (\n) सहित सभी वर्णों से मिलान करने की अनुमति देता है।

  • MULTILINE

    re.MULTILINE स्ट्रिंग की प्रत्येक लाइन की शुरुआत (^) और अंत ($) से मिलान करने की अनुमति देता है। हालांकि, आमतौर पर ^ और $ केवल पूरी स्ट्रिंग की शुरुआत और अंत से मेल खाएंगे।


  1. पायथन में पैटर्न कैसे प्रिंट करें पायथन में पैटर्न कैसे प्रिंट करें

    पायथन में पैटर्न्स को नेस्टेड फॉर लूप्स का उपयोग करके प्रिंट किया जा सकता है। बाहरी लूप का उपयोग पंक्तियों की संख्या के माध्यम से इटरेट करने के लिए किया जाता है जबकि आंतरिक लूप का उपयोग स्तंभों की संख्या को संभालने के लिए किया जाता है। प्रिंट स्टेटमेंट को आवश्यकतानुसार विभिन्न पैटर्न बनाने के लिए मॉ

  1. पायथन में फिलोटैक्सिस पैटर्न पायथन में फिलोटैक्सिस पैटर्न

    फिलोटैक्सिस पैटर्न क्या है? जब हम पीछे जाते हैं, हमारी वनस्पति विज्ञान की कक्षाओं और पौधों की दुनिया में, फिलोटैक्सिस का अर्थ है पौधे के तने पर फूलों, पत्तियों या बीजों की व्यवस्था, जो फाइबोनैचि स्पाइरल में पाए जाने के समान है। फाइबोनैचि अनुक्रम पर आधारित, फाइबोनैचि स्पाइरल संख्याओं का एक समूह है ज

  1. - पायथन में मल्टीपल लाइन्स पर पैटर्न कैसे मैच करें?

    re.DOTALL फ्लैग पायथन को बताता है कि . स्पेशल कैरेक्टर को सभी कैरेक्टर्स से मैच करना चाहिए, न्यूलाइन कैरेक्टर्स सहित। import re paragraph = This is a paragraph. It has multiple lines. match = re.search(r.*, paragraph, re.DOTALL) print(match.group(0)) आउटपुट: This is a paragraph. It has multiple li