Python RegEx: re.match(), re.search(), re.findall() उदाहरण के साथ

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

A नियमित अभिव्यक्ति (आरई) प्रोग्रामिंग भाषा में एक विशेष टेक्स्ट स्ट्रिंग है जिसका उपयोग खोज पैटर्न का वर्णन करने के लिए किया जाता है। यह कोड, फ़ाइल, लॉग, स्प्रेडशीट या यहां तक ​​कि दस्तावेज़ जैसे टेक्स्ट से जानकारी निकालने के लिए बेहद उपयोगी है।

का उपयोग करते समय Python रेगुलर एक्सप्रेशन में पहली बात यह पहचानना है कि सब कुछ अनिवार्य रूप से एक वर्ण है, और हम वर्णों के एक विशिष्ट अनुक्रम से मेल खाने के लिए पैटर्न लिख रहे हैं जिन्हें स्ट्रिंग भी कहा जाता है। ASCII या लैटिन अक्षर वे हैं जो आपके कीबोर्ड पर हैं और यूनिकोड का उपयोग विदेशी पाठ से मेल खाने के लिए किया जाता है। इसमें अंक और विराम चिह्न और सभी विशेष वर्ण जैसे $#@!%, आदि शामिल हैं।

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

  • पाठ मिलान
  • दुहराव
  • शाखाओं में
  • पैटर्न-रचना आदि।

नियमित अभिव्यक्ति या RegEx Python RE (REs, regexes या regex पैटर्न) के रूप में दर्शाया जाता है पुनः मॉड्यूल. Python लाइब्रेरी के माध्यम से नियमित अभिव्यक्ति का समर्थन करता है। Python विभिन्न चीजों का समर्थन करता है जैसे संशोधक, पहचानकर्ता, और रिक्त स्थान वर्ण.

Identifiers संशोधक श्वेत स्थान वर्ण पलायन आवश्यक
\d= कोई भी संख्या (एक अंक) \d एक अंक को दर्शाता है। उदाहरण: \d{1,5} यह 1,5 के बीच के अंकों को दर्शाएगा जैसे 424,444,545 आदि। \n = नई पंक्ति . + * ? [] $ ^ () {} | \
\D= कोई भी चीज़, सिवाय संख्या के (कोई गैर-अंक) + = 1 या अधिक से मेल खाता है \s= स्थान
\s = स्थान
(टैब, स्पेस, नई लाइन आदि)
? = 0 या 1 से मेल खाता है \t =टैब
\S= रिक्त स्थान के अलावा कुछ भी * = 0 या अधिक \e = पलायन
\w = अक्षर ( अल्फ़ान्यूमेरिक वर्ण का मिलान करें, जिसमें “_” भी शामिल है) $ स्ट्रिंग के अंत से मिलान करें \r = कैरिज रिटर्न
\W =अक्षरों के अलावा कुछ भी ( “_” को छोड़कर किसी गैर-अल्फ़ान्यूमेरिक वर्ण से मेल खाता है) ^ स्ट्रिंग की शुरुआत से मिलान करें \f= फॉर्म फ़ीड
. = अक्षर (अवधि) के अलावा कुछ भी | या तो x/y से मेल खाता है ------
\b = नई पंक्ति को छोड़कर कोई भी वर्ण [] = सीमा या “भिन्नता” ------
\. {x} = पूर्ववर्ती कोड की यह मात्रा ------

नियमित अभिव्यक्ति(आरई) सिंटैक्स

import re
  • “पुनः” मॉड्यूल शामिल है Python मुख्य रूप से स्ट्रिंग खोज और हेरफेर के लिए उपयोग किया जाता है
  • वेब पेज के लिए भी अक्सर उपयोग किया जाता है “स्क्रैपिंग” (वेबसाइटों से बड़ी मात्रा में डेटा निकालना)

हम व्यंजक ट्यूटोरियल की शुरुआत व्यंजकों (w+) और (^) का उपयोग करके इस सरल अभ्यास से करेंगे।

w+ और ^ अभिव्यक्ति का उदाहरण

  • “^”: यह अभिव्यक्ति स्ट्रिंग की शुरुआत से मेल खाती है
  • “डब्ल्यू+“: यह अभिव्यक्ति स्ट्रिंग में अल्फ़ान्यूमेरिक वर्ण से मेल खाती है

यहाँ हम देखेंगे Python RegEx उदाहरण कि हम अपने कोड में w+ और ^ एक्सप्रेशन का उपयोग कैसे कर सकते हैं। हम फ़ंक्शन re.findall() को कवर करते हैं Python, इस ट्यूटोरियल में बाद में चर्चा की जाएगी लेकिन कुछ समय के लिए हम केवल \w+ और \^ अभिव्यक्ति पर ध्यान केंद्रित करेंगे।

उदाहरण के लिए, हमारी स्ट्रिंग “guru99, education is fun” के लिए यदि हम w+ और^ के साथ कोड निष्पादित करते हैं, तो यह “guru99” आउटपुट देगा।

w+ और ^ अभिव्यक्ति का उदाहरण

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

याद रखें, यदि आप w+ से + चिन्ह हटा देंगे, तो आउटपुट बदल जाएगा, और यह केवल पहले अक्षर का पहला अक्षर देगा, अर्थात, [g]

re.split फ़ंक्शन में \s अभिव्यक्ति का उदाहरण

  • “s”: इस अभिव्यक्ति का उपयोग स्ट्रिंग में रिक्त स्थान बनाने के लिए किया जाता है

यह समझने के लिए कि यह RegEx कैसे काम करता है Python काम, हम एक सरल से शुरू करते हैं Python स्प्लिट फ़ंक्शन का RegEx उदाहरण। उदाहरण में, हमने “re.split” फ़ंक्शन का उपयोग करके प्रत्येक शब्द को विभाजित किया है और साथ ही हमने अभिव्यक्ति \s का उपयोग किया है जो स्ट्रिंग में प्रत्येक शब्द को अलग से पार्स करने की अनुमति देता है।

re.split फ़ंक्शन में \s अभिव्यक्ति

जब आप इस कोड को निष्पादित करेंगे तो यह आपको आउटपुट देगा ['we', 'are', 'splitting', 'the', 'words']।

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

re.split फ़ंक्शन में \s अभिव्यक्ति

इसी प्रकार, अन्य श्रृंखलाएँ भी हैं Python नियमित अभिव्यक्ति जिसे आप विभिन्न तरीकों से उपयोग कर सकते हैं Python जैसे \d,\D,$,\.,\b, आदि.

यहाँ पूरा कोड है

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

आगे, हम देखेंगे कि नियमित अभिव्यक्ति के साथ किस प्रकार की विधियों का उपयोग किया जाता है Python.

नियमित अभिव्यक्ति विधियों का उपयोग करना

“री” पैकेज वास्तव में इनपुट स्ट्रिंग पर क्वेरी करने के लिए कई विधियाँ प्रदान करता है। हम री के तरीकों को देखेंगे Python:

  • पुनः मिलान ()
  • अनुसंधान()
  • पुनः ढूँढें ()

नोट: नियमित अभिव्यक्तियों के आधार पर, Python दो अलग-अलग प्राथमिक ऑपरेशन प्रदान करता है। मैच विधि केवल स्ट्रिंग की शुरुआत में ही मैच की जाँच करती है जबकि सर्च स्ट्रिंग में कहीं भी मैच की जाँच करती है।

पुनः मिलान ()

पुनः मिलान () पुनः का कार्य Python नियमित अभिव्यक्ति पैटर्न खोजेगा और पहली घटना लौटाएगा। Python RegEx Match विधि केवल स्ट्रिंग की शुरुआत में ही मिलान की जाँच करती है। इसलिए, यदि पहली पंक्ति में मिलान पाया जाता है, तो यह मिलान ऑब्जेक्ट लौटाता है। लेकिन यदि किसी अन्य पंक्ति में मिलान पाया जाता है, तो यह मिलान ऑब्जेक्ट लौटाता है। Python RegEx Match फ़ंक्शन null लौटाता है.

उदाहरण के लिए, निम्नलिखित कोड पर विचार करें Python re.match() फ़ंक्शन। अभिव्यक्ति “w+” और “\W” अक्षर 'g' से शुरू होने वाले शब्दों से मेल खाएगी और उसके बाद, जो कुछ भी 'g' से शुरू नहीं होता है, उसकी पहचान नहीं की जाती है। सूची या स्ट्रिंग में प्रत्येक तत्व के लिए मिलान की जाँच करने के लिए, हम इस में forloop चलाते हैं Python re.match() उदाहरण.

पुनः मिलान ()

re.search(): पाठ में पैटर्न ढूँढना

अनुसंधान() फ़ंक्शन नियमित अभिव्यक्ति पैटर्न खोजेगा और पहली घटना लौटाएगा। Python re.match(), यह इनपुट स्ट्रिंग की सभी पंक्तियों की जाँच करेगा। Python re.search() फ़ंक्शन पैटर्न मिलने पर मिलान ऑब्जेक्ट लौटाता है और पैटर्न न मिलने पर “null” लौटाता है

सर्च() का उपयोग कैसे करें?

search() फ़ंक्शन का उपयोग करने के लिए, आपको आयात करने की आवश्यकता है Python पहले re मॉड्यूल और फिर कोड निष्पादित करें। Python re.search() फ़ंक्शन हमारे मुख्य स्ट्रिंग से स्कैन करने के लिए “पैटर्न” और “टेक्स्ट” लेता है

खोज का उपयोग करें()

उदाहरण के लिए यहां हम एक टेक्स्ट स्ट्रिंग “सॉफ्टवेयर” में दो शाब्दिक स्ट्रिंग “सॉफ्टवेयर परीक्षण” “guru99” की तलाश करते हैं परीक्षण मजेदार है"। "सॉफ्टवेयर परीक्षण" के लिए हमें मिलान मिल गया इसलिए यह आउटपुट देता है Python re.search() उदाहरण के लिए "मिलान मिला", जबकि शब्द "guru99" के लिए हम स्ट्रिंग में नहीं ढूंढ सके, इसलिए यह "कोई मिलान नहीं" के रूप में आउटपुट देता है।

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

सब ढूँढ़ो() मॉड्यूल का उपयोग किसी दिए गए पैटर्न से मेल खाने वाली “सभी” घटनाओं की खोज करने के लिए किया जाता है। इसके विपरीत, search() मॉड्यूल केवल निर्दिष्ट पैटर्न से मेल खाने वाली पहली घटना को लौटाएगा। findall() फ़ाइल की सभी पंक्तियों पर पुनरावृति करेगा और एक ही चरण में पैटर्न के सभी गैर-ओवरलैपिंग मिलानों को लौटाएगा।

re.findall() का उपयोग कैसे करें? Python?

यहां हमारे पास ई-मेल पतों की एक सूची है, और हम चाहते हैं कि सभी ई-मेल पते सूची से निकाले जाएं, इसके लिए हम re.findall() विधि का उपयोग करते हैं। Pythonयह सूची से सभी ई-मेल पते ढूंढ लेगा।

 re.findall() का उपयोग करें Python

re.findall() का उदाहरण के लिए पूरा कोड यहां दिया गया है

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python झंडे

बहुत Python रेगेक्स विधियाँ और रेगेक्स फ़ंक्शन फ़्लैग नामक एक वैकल्पिक तर्क लेते हैं। यह फ़्लैग दिए गए अर्थ को संशोधित कर सकता है Python रेगेक्स पैटर्न। इन्हें समझने के लिए हम इन फ्लैग्स के एक या दो उदाहरण देखेंगे।

विभिन्न झंडों का प्रयोग Python शामिल

रेगेक्स फ्लैग के लिए सिंटैक्स यह झंडा क्या करता है?
[पुनःएम] प्रत्येक पंक्ति के आरंभ/अंत पर विचार करें
[पुनःI] यह मामले की अनदेखी करता है
[पुनःएस] बनाना [ । ]
[पुनः यू] { \w,\W,\b,\B} को यूनिकोड नियमों का पालन करें
[पुनःएल] {\w,\W,\b,\B} को लोकेल का अनुसरण करने दें
[पुनःX] Regex में टिप्पणी की अनुमति दें

re.M या मल्टीलाइन फ्लैग का उदाहरण

मल्टीलाइन में पैटर्न कैरेक्टर [^] स्ट्रिंग के पहले कैरेक्टर और हर लाइन की शुरुआत (हर नई लाइन के तुरंत बाद) से मेल खाता है। जबकि एक्सप्रेशन स्मॉल “w” का इस्तेमाल स्पेस को कैरेक्टर से मार्क करने के लिए किया जाता है। जब आप कोड चलाते हैं तो पहला वेरिएबल “k1” सिर्फ़ गुरु99 शब्द के लिए कैरेक्टर 'g' प्रिंट करता है, जबकि जब आप मल्टीलाइन फ्लैग जोड़ते हैं, तो यह स्ट्रिंग में सभी एलिमेंट के पहले कैरेक्टर को निकालता है।

re.M या मल्टीलाइन फ्लैग का उदाहरण

कोड यहाँ है

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • हमने स्ट्रिंग "guru99…. careerguru99….selenium" के लिए वेरिएबल xx घोषित किया है
  • मल्टीलाइन फ्लैग का उपयोग किए बिना कोड चलाएं, यह लाइनों से केवल 'g' आउटपुट देता है
  • कोड को “मल्टीलाइन” फ्लैग के साथ चलाएं, जब आप 'k2' प्रिंट करते हैं तो यह 'g', 'c' और 's' के रूप में आउटपुट देता है
  • अतः, उपरोक्त उदाहरण में बहु-पंक्तियाँ जोड़ने के बाद और पहले हम अंतर देख सकते हैं।

इसी तरह, आप अन्य का भी उपयोग कर सकते हैं Python re.U (यूनिकोड), re.L (स्थानीय भाषा का अनुसरण करें), re.X (टिप्पणी की अनुमति दें), आदि जैसे झंडे।

Python 2 उदाहरण

उपरोक्त कोड हैं Python 3 उदाहरण, यदि आप भागना चाहते हैं Python 2 कृपया निम्नलिखित कोड पर विचार करें।

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

अपना परीक्षण करें Python ज्ञान - Sanxin

1. किसी स्ट्रिंग में पैटर्न की सभी घटनाओं को खोजने के लिए किस विधि का उपयोग किया जाता है?

  • अनुसंधान()
  • पुनः मिलान ()
  • पुनः ढूँढें ()
  • पुनःविभाजन()
re.findall() का उपयोग स्ट्रिंग में पैटर्न की सभी घटनाओं को खोजने के लिए किया जाता है।

2. नियमित अभिव्यक्ति में \d वर्ण वर्ग क्या दर्शाता है?

  • कोई भी अंक (0-9)
  • कोई भी गैर-अंकीय वर्ण
  • कोई भी रिक्त स्थान वर्ण
  • कोई भी अक्षर या संख्या
\d किसी भी अंक (0-9) को दर्शाता है.

3. रिक्त स्थान के आधार पर स्ट्रिंग को विभाजित करने के लिए आप किस फ़ंक्शन का उपयोग करेंगे?

  • re.split(r'\s', स्ट्रिंग)
  • re.findall(r'\w+', स्ट्रिंग)
  • re.match(r'\s+', स्ट्रिंग)
  • re.split(r'\w+', स्ट्रिंग)
re.split(r'\s', string) \s अभिव्यक्ति का उपयोग करके रिक्त स्थान के आधार पर एक स्ट्रिंग को विभाजित करता है।

4. re.match() और re.search() के बीच मुख्य अंतर क्या है?

  • re.match() स्ट्रिंग के आरंभ में पैटर्न खोजता है, जबकि re.search() स्ट्रिंग में कहीं भी पैटर्न खोजता है।
  • re.match() सभी मिलान लौटाता है, जबकि re.search() पहला मिलान लौटाता है।
  • re.search(), re.match() से अधिक तेज़ है.
  • दोनों कार्य एक ही तरह से कार्य करते हैं।
re.match() स्ट्रिंग के आरंभ में पैटर्न खोजता है, जबकि re.search() स्ट्रिंग में कहीं भी पैटर्न खोजता है।

सारांश

एक नियमित अभिव्यक्ति प्रोग्रामिंग भाषा एक विशेष टेक्स्ट स्ट्रिंग है जिसका उपयोग खोज पैटर्न का वर्णन करने के लिए किया जाता है। इसमें अंक और विराम चिह्न और सभी विशेष वर्ण जैसे $#@!%, आदि शामिल हैं। अभिव्यक्ति में शाब्दिक शामिल हो सकते हैं

  • पाठ मिलान
  • दुहराव
  • शाखाओं में
  • पैटर्न-रचना आदि।

In Python, एक नियमित अभिव्यक्ति को RE (REs, regexes या regex पैटर्न) के रूप में दर्शाया जाता है Python पुनः मॉड्यूल.

  • “पुनः” मॉड्यूल शामिल है Python मुख्य रूप से स्ट्रिंग खोज और हेरफेर के लिए उपयोग किया जाता है
  • वेबपेज "स्क्रैपिंग" (वेबसाइटों से बड़ी मात्रा में डेटा निकालना) के लिए भी अक्सर उपयोग किया जाता है
  • नियमित अभिव्यक्ति विधियों में शामिल हैं पुनः.मैच(), पुनः.सर्च() और पुनः.फाइंडऑल()
  • अन्य Python RegEx प्रतिस्थापन विधियाँ sub() और subn() हैं जिनका उपयोग re में मेल खाने वाली स्ट्रिंग्स को बदलने के लिए किया जाता है
  • Python झंडे बहुत Python रेगेक्स विधियाँ और रेगेक्स फ़ंक्शन फ्लैग्स नामक एक वैकल्पिक तर्क लेते हैं
  • यह ध्वज दिए गए Regex पैटर्न के अर्थ को संशोधित कर सकता है
  • विभिन्न Python रेगेक्स विधियों में प्रयुक्त झंडे re.M, re.I, re.S आदि हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: