पायथन में रेगुलर एक्सप्रेशन फ्लैग्स
रेगुलर एक्सप्रेशन के साथ काम करने वाली विधियों के लिए वैकल्पिक पैरामीटर में से एक के रूप में फ्लैग्स सेट करने के लिए, निम्न सिंटैक्स का उपयोग किया जाता है:
flags=re.फ्लैग का नाम
रेगुलर एक्सप्रेशन के साथ काम करने के लिए मुख्य फ्लैग्स
| फ्लैग | उद्देश्य |
|---|---|
re.IGNORECASE |
वर्णों के केस को नजरअंदाज करना। |
re.DOTALL |
डॉट किसी भी वर्ण को दर्शाता है, जिसमें नई लाइन भी शामिल है। |
re.I |
खोज को केस-इनसेंसिटिव बनाता है। |
re.L |
वर्तमान भाषा के अनुसार शब्दों को खोजता है।
यह व्याख्या अल्फाबेटिक ग्रुप (\w और \W) को प्रभावित करती है, साथ ही
शब्द सीमा के व्यवहार (\b और
\B) को भी प्रभावित करती है।
|
re.M |
$ प्रतीक टेक्स्ट की किसी भी लाइन के अंत में खोज करता है (केवल टेक्स्ट के अंत में नहीं)
और ^ प्रतीक टेक्स्ट की किसी भी लाइन की शुरुआत में खोज करता है (केवल टेक्स्ट की शुरुआत में नहीं)।
|
re.S |
डॉट (.) के मान को बदलकर किसी भी वर्ण से मेल खाने के लिए कर देता है, जिसमें नई लाइन भी शामिल है।
|
re.U |
यूनिकोड वर्ण सेट के अनुसार अक्षरों की व्याख्या करता है।
यह फ्लैग \w, \W, \b,
\B के व्यवहार को प्रभावित करता है।
पायथन 3+ में यह फ्लैग डिफ़ॉल्ट रूप से सेट होता है।
|
re.X |
रेगुलर एक्सप्रेशन के मल्टीलाइन सिंटैक्स की अनुमति देता है।
यह पैटर्न के अंदर की स्पेस को नजरअंदाज करता है ([] सेट के अंदर की स्पेस या बैकस्लैश से एस्केप किए गए स्पेस को छोड़कर)
और अनएस्केप्ड '#' को कमेंट के रूप में मानता है।
|
उदाहरण
re.IGNORECASE फ्लैग का उपयोग करके वर्णों के केस को नजरअंदाज किया जा सकता है।
आइए देखें कि यह कैसे किया जाता है।
इस उदाहरण में रेगुलर एक्सप्रेशन केवल छोटे अक्षर ढूंढेगा:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
कोड निष्पादन का परिणाम:
'! ! CCC DDD'
उदाहरण
अब हम मेथड के चौथे पैरामीटर में re.IGNORECASE फ्लैग जोड़ते हैं और रेगुलर एक्सप्रेशन सभी केस में वर्ण ढूंढना शुरू कर देगा:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
कोड निष्पादन का परिणाम:
'! ! ! !'
उदाहरण
आइए रेगुलर एक्सप्रेशन द्वारा सभी नई लाइन ढूंढें:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
निष्पादित कोड का परिणाम:
'aaa!bbb'
उदाहरण
लेकिन, अगर सभी वर्णों को बदलना हो, तो रेगुलर एक्सप्रेशन में डॉट लगाने पर नई लाइन कैप्चर नहीं होंगी:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
निष्पादित कोड का परिणाम:
'!!!
!!!'
उदाहरण
इस त्रुटि को ठीक करने के लिए, re.DOTALL फ्लैग का उपयोग करना चाहिए:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
निष्पादित कोड का परिणाम:
'!!!!!!!'
उदाहरण
पैरामीटर में एक से अधिक फ्लैग भी पास किए जा सकते हैं, उनके बीच + ऑपरेटर लगाकर।
आइए पहले लाइन के अंत में आने वाले 'a' अक्षर को बदलें:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
निष्पादित कोड का परिणाम:
'''
aaa
AAA
!
'''
उदाहरण
अब re.M फ्लैग लगाएं:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
निष्पादित कोड का परिणाम:
'''
!
AAA
!
'''
उदाहरण
आइए अब केस इग्नोर करने के लिए भी फ्लैग लगाएं:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
निष्पादित कोड का परिणाम:
'''
!
!
!
'''