पायथन 3 - नियमित अभिव्यक्तियाँ

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

मॉड्यूल reपायथन में पर्ल जैसी नियमित अभिव्यक्तियों के लिए पूर्ण समर्थन प्रदान करता है। re मॉड्यूल अपवाद को उठाता है re.error यदि एक संकलित या नियमित अभिव्यक्ति का उपयोग करते समय कोई त्रुटि होती है।

हम दो महत्वपूर्ण कार्यों को कवर करेंगे, जिनका उपयोग नियमित अभिव्यक्ति को संभालने के लिए किया जाएगा। फिर भी, पहले एक छोटी सी बात: विभिन्न वर्ण हैं, जिनका विशेष अर्थ होगा जब वे नियमित अभिव्यक्ति में उपयोग किए जाते हैं। नियमित अभिव्यक्ति के साथ काम करते समय किसी भी भ्रम से बचने के लिए, हम रॉ स्ट्रिंग्स का उपयोग करेंगेr'expression'

बुनियादी पैटर्न जो एकल वर्णों से मेल खाते हैं

अनु क्रमांक। अभिव्यक्ति और मेल खाता है
1

a, X, 9, <

साधारण पात्र सिर्फ अपने आप से मेल खाते हैं।

2

. (a period)

न्यूलाइन '\ n' को छोड़कर किसी भी एकल वर्ण से मेल खाता है

3

\w

एक "शब्द" वर्ण से मेल खाता है: एक अक्षर या अंक या अंडरबार [a-zA-Z0-9_]।

4

\W

किसी भी गैर-शब्द चरित्र से मेल खाता है।

5

\b

शब्द और गैर-शब्द के बीच की सीमा

6

\s

एक ही व्हाट्सएप कैरेक्टर से मेल खाता है - स्पेस, न्यूलाइन, रिटर्न, टैब

7

\S

किसी भी गैर-व्हाट्सएप चरित्र से मेल खाता है।

8

\t, \n, \r

टैब, न्यूलाइन, वापसी

9

\d

दशमलव अंक [0-9]

10

^

मैच की शुरुआत स्ट्रिंग से होती है

1 1

$

स्ट्रिंग के अंत का मिलान करें

12

\

एक चरित्र की "विशिष्टता" को रोकना।

संकलन के झंडे

संकलन के झंडे आपको कुछ पहलुओं को संशोधित करने देते हैं कि नियमित अभिव्यक्ति कैसे काम करती है। फ्लैग दो नामों के तहत पुनः मॉड्यूल में उपलब्ध हैं, एक लंबा नाम जैसेIGNORECASE और एक छोटा, एक अक्षर वाला फॉर्म जैसे I

अनु क्रमांक। झंडा और अर्थ
1

ASCII, A

संबंधित संपत्ति के साथ ASCII वर्णों पर केवल \ w, \ b, \ s और \ d जैसे कई पलायन करता है।

2

DOTALL, S

किसी भी चरित्र को मेल करें, जिसमें नई सुर्खियाँ भी हों

3

IGNORECASE, I

केस-असंवेदनशील मिलान करें

4

LOCALE, L

स्थानीय-जागरूक मिलान करें

5

MULTILINE, M

मल्टी-लाइन मिलान, प्रभावित ^ और $

6

VERBOSE, X (for ‘extended’)

वर्बोज़ आरईएस सक्षम करें, जिसे अधिक सफाई और समझदारी से व्यवस्थित किया जा सकता है

मैच समारोह

यह फ़ंक्शन आरई पैटर्न को वैकल्पिक झंडे के साथ स्ट्रिंग से मिलान करने का प्रयास करता है ।

यहाँ इस समारोह के लिए वाक्य रचना है -

re.match(pattern, string, flags = 0)

यहाँ मापदंडों का वर्णन है -

अनु क्रमांक। पैरामीटर और विवरण
1

pattern

यह मिलान की जाने वाली नियमित अभिव्यक्ति है।

2

string

यह स्ट्रिंग है, जिसे स्ट्रिंग की शुरुआत में पैटर्न से मिलान करने के लिए खोजा जाएगा।

3

flags

आप बिटवाइस या (|) का उपयोग करके विभिन्न झंडे निर्दिष्ट कर सकते हैं। ये संशोधक हैं, जो नीचे दी गई तालिका में सूचीबद्ध हैं।

Re.match समारोह रिटर्न एकmatch सफलता पर वस्तु, Noneअसफलता पर। हम समूह (संख्या) या समूहों () के फ़ंक्शन का उपयोग करते हैंmatch आपत्तिजनक अभिव्यक्ति पाने के लिए वस्तु।

अनु क्रमांक। मैच ऑब्जेक्ट विधि और विवरण
1

group(num = 0)

यह विधि संपूर्ण मिलान (या विशिष्ट उपसमूह संख्या) लौटाती है

2

groups()

यह विधि सभी मिलान उपसमूहों को एक टपल में खाली कर देती है (यदि कोई नहीं था तो खाली है)

उदाहरण

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

खोज समारोह

यह फ़ंक्शन वैकल्पिक झंडे के साथ स्ट्रिंग के भीतर आरई पैटर्न की पहली घटना की खोज करता है ।

यहाँ इस समारोह के लिए वाक्य रचना है -

re.search(pattern, string, flags = 0)

यहाँ मापदंडों का वर्णन है -

अनु क्रमांक। पैरामीटर और विवरण
1

pattern

यह मिलान की जाने वाली नियमित अभिव्यक्ति है।

2

string

यह स्ट्रिंग है, जिसे स्ट्रिंग में कहीं भी पैटर्न से मिलान करने के लिए खोजा जाएगा।

3

flags

आप बिटवाइस या (|) का उपयोग करके विभिन्न झंडे निर्दिष्ट कर सकते हैं। ये संशोधक हैं, जो नीचे दी गई तालिका में सूचीबद्ध हैं।

Re.search समारोह रिटर्न एकmatch सफलता पर वस्तु, noneअसफलता पर। हम समूह (संख्या) या समूहों () के फ़ंक्शन का उपयोग करते हैंmatch मिलान अभिव्यक्ति प्राप्त करने के लिए वस्तु।

अनु क्रमांक। मैच ऑब्जेक्ट विधि और विवरण
1

group(num = 0)

यह विधि संपूर्ण मिलान (या विशिष्ट उपसमूह संख्या) लौटाती है

2

groups()

यह विधि सभी मिलान उपसमूहों को एक टपल में खाली कर देती है (यदि कोई नहीं था तो खाली है)

उदाहरण

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print ("searchObj.group() : ", searchObj.group())
   print ("searchObj.group(1) : ", searchObj.group(1))
   print ("searchObj.group(2) : ", searchObj.group(2))
else:
   print ("Nothing found!!")

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

मिलान बनाम खोज

पायथन नियमित अभिव्यक्ति के आधार पर दो अलग-अलग आदिम संचालन प्रदान करता है: match केवल स्ट्रिंग की शुरुआत में एक मैच के लिए जाँच करता है, जबकि search स्ट्रिंग में कहीं भी मैच के लिए जाँच (यह डिफ़ॉल्ट रूप से पर्ल क्या करता है)।

उदाहरण

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print ("search --> searchObj.group() : ", searchObj.group())
else:
   print ("Nothing found!!")

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

No match!!
search --> matchObj.group() :  dogs

खोजें और बदलें

सबसे महत्वपूर्ण में से एक re नियमित अभिव्यक्ति का उपयोग करने वाले तरीके हैं sub

वाक्य - विन्यास

re.sub(pattern, repl, string, max=0)

इस विधि आरई की सभी घटनाओं की जगह पैटर्न में स्ट्रिंग के साथ repl , सभी घटनाओं प्रतिस्थापन जब तक अधिकतम प्रदान की जाती है। यह विधि संशोधित स्ट्रिंग लौटाती है।

उदाहरण

#!/usr/bin/python3
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print ("Phone Num : ", num)

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print ("Phone Num : ", num)

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Phone Num :  2004-959-559
Phone Num :  2004959559

नियमित अभिव्यक्ति संशोधक: विकल्प झंडे

मिलान के विभिन्न पहलुओं को नियंत्रित करने के लिए नियमित अभिव्यक्ति शाब्दिक में एक वैकल्पिक संशोधक शामिल हो सकता है। संशोधक को एक वैकल्पिक ध्वज के रूप में निर्दिष्ट किया गया है। आप अनन्य या (!) का उपयोग करके कई संशोधक प्रदान कर सकते हैं, जैसा कि पहले दिखाया गया है और इनमें से किसी एक का प्रतिनिधित्व किया जा सकता है -

अनु क्रमांक। संशोधक और विवरण
1

re.I

केस-असंवेदनशील मिलान करता है।

2

re.L

वर्तमान स्थान के अनुसार शब्दों की व्याख्या करता है। यह व्याख्या अक्षर समूह (\ w और \ W) को प्रभावित करती है, साथ ही साथ शब्द सीमा व्यवहार (\ b और \ B) को भी प्रभावित करती है।

3

re.M

$ एक पंक्ति के अंत से मेल खाता है (न केवल स्ट्रिंग के अंत में) और किसी भी पंक्ति की शुरुआत से मेल खाता है (न केवल स्ट्रिंग की शुरुआत)।

4

re.S

एक अवधि (डॉट) किसी भी वर्ण से मेल खाती है, जिसमें एक नई रेखा भी शामिल है।

5

re.U

यूनिकोड वर्ण सेट के अनुसार अक्षरों की व्याख्या करता है। यह ध्वज \ w, \ W, \ b, \ B के व्यवहार को प्रभावित करता है।

6

re.X

"अभिव्यक्ति" नियमित अभिव्यक्ति वाक्यविन्यास की अनुमति देता है। यह व्हाट्सएप को अनदेखा करता है (एक सेट के अंदर [या जब एक बैकस्लैश से बच जाता है) और एक टिप्पणी मार्कर के रूप में अपठित # व्यवहार करता है।

नियमित अभिव्यक्ति पैटर्न

नियंत्रण वर्णों को छोड़कर, (+ ? . * ^ $ ( ) [ ] { } | \), सभी वर्ण खुद से मेल खाते हैं। आप एक बैकस्लैश के साथ पूर्ववर्ती द्वारा एक नियंत्रण चरित्र से बच सकते हैं।

निम्न तालिका पायथन में उपलब्ध नियमित अभिव्यक्ति सिंटैक्स को सूचीबद्ध करती है -

अनु क्रमांक। पैरामीटर और विवरण
1

^

लाइन की शुरुआत से मेल खाता है।

2

$

लाइन के अंत का मिलान।

3

.

न्यूलाइन को छोड़कर किसी भी एकल वर्ण से मेल खाता है। M विकल्प का उपयोग करने से यह न्यूलाइन को भी मैच कर सकता है।

4

[...]

कोष्ठक में किसी एक वर्ण से मेल खाता है।

5

[^...]

किसी भी एकल वर्ण को कोष्ठक में नहीं मिलाता है

6

re*

पूर्ववर्ती अभिव्यक्ति के 0 या अधिक घटनाओं से मेल खाता है।

7

re+

पूर्ववर्ती अभिव्यक्ति की 1 या अधिक घटना से मेल खाती है।

8

re?

पूर्ववर्ती अभिव्यक्ति की 0 या 1 घटना से मेल खाता है।

9

re{ n}

पूर्ववर्ती अभिव्यक्ति की घटनाओं की बिल्कुल n संख्या से मेल खाता है।

10

re{ n,}

पूर्ववर्ती अभिव्यक्ति की n या अधिक घटनाओं से मेल खाता है।

1 1

re{ n, m}

कम से कम n और पूर्ववर्ती अभिव्यक्ति के अधिकांश m घटनाओं पर मेल खाता है।

12

a|b

माचिस या तो एक या बी।

13

(re)

समूह नियमित अभिव्यक्ति और याद किए गए पाठ से मेल खाते हैं।

14

(?imx)

एक नियमित अभिव्यक्ति के भीतर i, m या x विकल्पों पर अस्थायी रूप से टॉगल किया जाता है। यदि कोष्ठक में, केवल वह क्षेत्र प्रभावित होता है।

15

(?-imx)

नियमित अभिव्यक्ति के भीतर मैं, मी, या x विकल्प बंद करता है। यदि कोष्ठक में, केवल वह क्षेत्र प्रभावित होता है।

16

(?: re)

मिलान किए गए पाठ को याद किए बिना समूह नियमित अभिव्यक्ति।

17

(?imx: re)

कोष्ठक के भीतर i, m या x विकल्पों पर अस्थायी रूप से टॉगल किया जाता है।

18

(?-imx: re)

कोष्ठक के भीतर मैं, मी, या x विकल्प बंद करता है।

19

(?#...)

टिप्पणी।

20

(?= re)

एक पैटर्न का उपयोग करके स्थिति निर्दिष्ट करता है। एक सीमा नहीं है।

21

(?! re)

पैटर्न नकार का उपयोग कर स्थिति निर्दिष्ट करता है। एक सीमा नहीं है।

22

(?> re)

बैकट्रैकिंग के बिना स्वतंत्र पैटर्न से मेल खाता है।

23

\w

शब्द वर्णों से मेल खाता है।

24

\W

नॉनवर्ड कैरेक्टर से मेल खाता है।

25

\s

व्हॉट्सएप से मेल खाता है। [\ T \ n \ r \ f] के बराबर।

26

\S

नॉनवेजपेस से मेल खाता है।

27

\d

अंकों का मिलान करता है। [0-9] के बराबर।

28

\D

Nondigits से मेल खाता है।

29

\A

स्ट्रिंग की शुरुआत से मेल खाता है।

30

\Z

स्ट्रिंग का अंत मेल खाता है। यदि कोई नई रेखा मौजूद है, तो यह नई रेखा से ठीक पहले मेल खाती है।

31

\z

स्ट्रिंग का अंत मेल खाता है।

32

\G

मैच प्वाइंट जहां अंतिम मैच समाप्त हुआ।

33

\b

शब्द सीमाएँ जब कोष्ठक के बाहर मिलती हैं। कोष्ठक के अंदर होने पर बैकस्पेस (0x08) से मेल खाता है।

34

\B

गैर-शब्द सीमाओं से मेल खाता है।

35

\n, \t, etc.

मेल खाती है नई गाड़ी, गाड़ी का रिटर्न, टैब आदि।

36

\1...\9

मेल nth समूहीकृत उपसक्रियता।

37

\10

यदि यह पहले से ही मेल खाता है तो nth समूहित उपसंचाई से मेल खाता है। अन्यथा एक चरित्र कोड के अष्टक प्रतिनिधित्व को संदर्भित करता है।

नियमित अभिव्यक्ति के उदाहरण

शाब्दिक वर्ण

अनु क्रमांक। उदाहरण और विवरण
1

python

मैच "अजगर"।

चरित्र वर्ग

अनु क्रमांक। उदाहरण और विवरण
1

[Pp]ython

मैच "पायथन" या "अजगर"

2

rub[ye]

मैच "माणिक" या "रुब"

3

[aeiou]

किसी भी लोअरकेस स्वर का मिलान करें

4

[0-9]

किसी अंक का मिलान करें; समान [0123456789]

5

[a-z]

किसी भी लोअरकेस ASCII पत्र का मिलान करें

6

[A-Z]

किसी भी अपरकेस ASCII पत्र से मिलान करें

7

[a-zA-Z0-9]

उपरोक्त में से कोई भी मिलान करें

8

[^aeiou]

लोअरकेस स्वर के अलावा किसी भी चीज़ का मिलान करें

9

[^0-9]

एक अंक के अलावा कुछ भी मिलान करें

विशेष वर्ण वर्ग

अनु क्रमांक। उदाहरण और विवरण
1

.

न्यूलाइन को छोड़कर किसी भी कैरेक्टर से मैच करें

2

\d

एक अंक का मिलान करें: [0-9]

3

\D

एक nondigit मैच: [^ 0-9]

4

\s

एक व्हाट्सएप पात्र से मिलान करें: [\ t \ r \ n \ f]

5

\S

मैच नॉनवॉइटस्पेस: [^ \ t \ r \ n \ f]

6

\w

किसी एक शब्द के पात्र का मिलान करें: [A-Za-z0-9_]

7

\W

एक चरित्र का मिलान करें: [^ A-Za-z0-9_]

दोहराव के मामले

अनु क्रमांक। उदाहरण और विवरण
1

ruby?

मैच "रगड़" या "रूबी": y वैकल्पिक है

2

ruby*

मैच "रगड़" प्लस 0 या अधिक ys

3

ruby+

मैच "रगड़" प्लस 1 या अधिक वाईएस

4

\d{3}

बिल्कुल 3 अंको का मिलान करें

5

\d{3,}

3 या अधिक अंकों का मिलान करें

6

\d{3,5}

मैच 3, 4, या 5 अंक

निन्दात्मक पुनरावृत्ति

यह पुनरावृत्ति की सबसे छोटी संख्या से मेल खाता है -

अनु क्रमांक। उदाहरण और विवरण
1

<.*>

लालची पुनरावृत्ति: "<python> perl>" से मेल खाता है

2

<.*?>

Nongreedy: "<python> perl>" में "<python>" से मेल खाता है

कोष्ठकों के साथ समूहन

अनु क्रमांक। उदाहरण और विवरण
1

\D\d+

कोई समूह नहीं: + दोहराता है

2

(\D\d)+

समूहीकृत: + दोहराता \ D \ d जोड़ी

3

([Pp]ython(,)?)+

मैच "पायथन", "पायथन, अजगर, अजगर", आदि।

Backreferences

यह पहले से मिलान किए गए समूह से फिर से मेल खाता है -

अनु क्रमांक। उदाहरण और विवरण
1

([Pp])ython&\1ails

अजगर और पाल या अजगर और पूंछ का मिलान करें

2

(['"])[^\1]*\1

सिंगल या डबल-उद्धृत स्ट्रिंग। 1 समूह से जो भी मेल खाता है, \ 1 मैच। \ 2 मैच 2 समूह से जो भी मेल खाता है, आदि।

वैकल्पिक

अनु क्रमांक। उदाहरण और विवरण
1

python|perl

मैच "अजगर" या "पर्ल"

2

rub(y|le)

मैच "माणिक" या "रूबल"

3

Python(!+|\?)

"पायथन" एक या एक से अधिक के बाद! या एक?

एंकर

यह मैच की स्थिति निर्दिष्ट करने की आवश्यकता है।

अनु क्रमांक। उदाहरण और विवरण
1

^Python

एक स्ट्रिंग या आंतरिक रेखा की शुरुआत में "पायथन" से मिलान करें

2

Python$

एक स्ट्रिंग या लाइन के अंत में "पायथन" का मिलान करें

3

\APython

एक स्ट्रिंग की शुरुआत में "पायथन" मैच

4

Python\Z

एक स्ट्रिंग के अंत में मैच "पायथन"

5

\bPython\b

एक शब्द सीमा पर "पायथन" मैच

6

\brub\B

\ B नॉनवर्ड सीमा है: "रब" और "रूबी" में "रगड़" मिलाएं लेकिन अकेले नहीं

7

Python(?=!)

मैच "पायथन", यदि एक विस्मयादिबोधक बिंदु के बाद।

8

Python(?!!)

मैच "पायथन", यदि एक विस्मयादिबोधक बिंदु के बाद नहीं।

कोष्ठक के साथ विशेष सिंटैक्स

अनु क्रमांक। उदाहरण और विवरण
1

R(?#comment)

"आर" से मेल खाता है। बाकी सभी एक टिप्पणी है

2

R(?i)uby

केस-असंवेदनशील "uby" से मेल खाते हुए

3

R(?i:uby)

ऊपर की तरह

4

rub(?:y|le))

केवल \ 1 backreference बनाए बिना समूह