पायथन में नियमित अभिव्यक्तियाँ
यह लेख पायथन में नियमित अभिव्यक्तियों को समझाता है।
हम re मॉड्यूल के मूल उपयोग से लेकर जटिल नियमित अभिव्यक्ति पैटर्न मिलान तक के विभिन्न विषयों को कवर करेंगे।
YouTube Video
पायथन में नियमित अभिव्यक्तियाँ
re मॉड्यूल नियमित अभिव्यक्तियों का उपयोग करके स्ट्रिंग को खोजने और जोड़-तोड़ करने के लिए उपयोग किया जाता है।
re मॉड्यूल क्या है?
re मॉड्यूल पायथन की मानक लाइब्रेरी का हिस्सा है और नियमित अभिव्यक्तियों का उपयोग करके स्ट्रिंग संशोधन के लिए कार्यक्षमता प्रदान करता है। नियमित अभिव्यक्तियों का उपयोग विशिष्ट स्ट्रिंग पैटर्न को प्रभावी रूप से खोजने, निकालने या बदलने के लिए किया जाता है।
मूल नियमित अभिव्यक्ति पैटर्न
नियमित अभिव्यक्तियाँ विशेष प्रतीकों का उपयोग करके पैटर्न परिभाषित करती हैं। नीचे कुछ मूल पैटर्न दिए गए हैं।
.: कोई भी एकल वर्ण^: स्ट्रिंग की शुरुआत$: स्ट्रिंग का अंत\d: कोई भी अंक (0-9)\w: कोई भी शब्द वर्ण (a-z, A-Z, 0-9, _)\s: कोई भी रिक्त स्थान वर्ण*: शून्य या अधिक पुनरावृत्तियाँ+: एक या अधिक पुनरावृत्तियाँ[]: वर्ण वर्ग (जैसे,[a-z]छोटे अक्षरों से मेल खाता है)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- यह कोड पहले जाँचता है कि स्ट्रिंग पोस्टल कोड के पैटर्न से मेल खाती है या नहीं। इसके बाद, यह जाँचता है कि पूरी स्ट्रिंग (आरंभ से अंत तक) एक ऐसे पैटर्न से मेल खाती है या नहीं जो एक शब्द, व्हाइटस्पेस, अंक, व्हाइटस्पेस, और एक अंग्रेज़ी शब्द से बना है। यह आपको समझने में मदद करता है कि रेगुलर एक्सप्रेशन के मूल तत्वों को कैसे जोड़ा जा सकता है।
मिलान फ़ंक्शनों का उपयोग कैसे करें
re.match()
re.match() जाँचता है कि क्या स्ट्रिंग की शुरुआत निर्दिष्ट पैटर्न से मेल खाती है।
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- यह कोड जाँचता है कि स्ट्रिंग किसी वर्ड कैरेक्टर (अल्फ़ान्यूमेरिक या अंडरस्कोर) से शुरू होती है या नहीं। पहला शब्द 'Python' पैटर्न से मेल खाता है और आउटपुट किया जाता है।
re.search()
re.search() पूरी स्ट्रिंग को स्कैन करता है और पहला मिलान लौटाता है।
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- यह कोड पूरी स्ट्रिंग में 'powerful' शब्द को खोजता है और पहला मेल लौटाता है। परिणामस्वरूप,
re.search()मेल खाई हुई स्ट्रिंग 'powerful' को आउटपुट करता है।
re.findall()
re.findall() पैटर्न के सभी मेलों को एक सूची के रूप में लौटाता है।
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- यह कोड उन सभी शब्दों को ढूँढता है जो ठीक छह अक्षरों के हैं और उन्हें सूची के रूप में लौटाता है। स्ट्रिंग में 'Python' शर्त से मेल खाता है, और सूची
['Python']आउटपुट होती है।
re.finditer()
re.finditer() सभी मेलों को एक इटरेटर के रूप में लौटाता है, जिससे आप प्रत्येक मिलान की विस्तृत जानकारी प्राप्त कर सकते हैं।
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- यह कोड क्रमवार सभी छह-अक्षरी शब्दों को खोजता है और प्रत्येक मेल को एक इटरेटर के माध्यम से प्रोसेस करता है। 'Python' यहाँ पैटर्न से मेल खाता है और आउटपुट होता है।
प्रतिस्थापन और विभाजन
re.sub()
re.sub() स्ट्रिंग के उन हिस्सों को जो नियमित अभिव्यक्ति से मेल खाते हैं, दूसरे स्ट्रिंग से बदल देता है।
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- यह कोड स्ट्रिंग में सभी अंकों को 'many' से बदल देता है।
re.split()
re.split() स्ट्रिंग को उन हिस्सों पर विभाजित करता है जो नियमित अभिव्यक्ति से मेल खाते हैं।
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- यह कोड एक या अधिक व्हाइटस्पेस कैरेक्टर पर स्ट्रिंग को विभाजित करता है। परिणामस्वरूप, स्ट्रिंग शब्दों में विभाजित हो जाती है, और
['Python', 'is', 'powerful']प्राप्त होता है।
ग्रुप्स और कैप्चर
नियमित अभिव्यक्ति ग्रुपिंग का उपयोग करने से मेल खाने वाले उप-स्ट्रिंग को निकालना आसान हो जाता है। कोष्ठकों () में संलग्न करने से इसे एक समूह के रूप में कैप्चर किया जाता है।
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- यह कोड '123-4567' जैसे पोस्टल कोड से 3-अंकों और 4-अंकों वाली संख्याएँ अलग-अलग समूहों के रूप में निकालता है।
group(1)पहले तीन अंक '123' लौटाता है, औरgroup(2)आख़िरी चार अंक '4567' लौटाता है।
नामित समूह
नामित समूहों का उपयोग करके आप इंडेक्स पर निर्भर रहने के बजाय अर्थपूर्ण नामों से मान प्राप्त कर सकते हैं। नीचे लॉग से तिथि और स्तर निकालने का एक ठोस उदाहरण दिया गया है।
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- यह कोड लॉग स्ट्रिंग से तिथि, समय, स्तर, और संदेश निकालने के लिए नामित समूहों का उपयोग करता है। यह इंडेक्स के बजाय अर्थपूर्ण नामों का उपयोग करके मानों को प्राप्त करता है।
फ्लैग विकल्पों का उपयोग करना
re मॉड्यूल में खोज व्यवहार को नियंत्रित करने के लिए कई फ्लैग विकल्प हैं।
re.IGNORECASE(re.I): एक फ्लैग विकल्प जो मिलान को केस-सेंसिटिविटी से मुक्त करता है।re.MULTILINE(re.M): एक फ्लैग विकल्प जो कई पंक्तियों में मेल स्थापित करने में सक्षम बनाता है।re.DOTALL(re.S): एक फ्लैग विकल्प जहां डॉट.न्यूलाइन कैरेक्टर से भी मेल खाता है।
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- यह कोड 'python' शब्द को केस-इनसेंसिटिव तरीके से खोजता है।
re.IGNORECASEफ़्लैग का उपयोग करने पर यह 'Python' से भी मेल खाता है।
रेगुलर एक्सप्रेशन ऑब्जेक्ट्स (re.compile) के लाभ
re.compile से पैटर्न को कंपाइल करने पर पुन: उपयोग अधिक कुशल हो जाता है और पठनीयता सुधरती है। आप यहाँ फ़्लैग भी सेट कर सकते हैं।
निम्न उदाहरण एक कंपाइल्ड पैटर्न का उपयोग करके कई पंक्तियों में बार-बार मेल खोजता है। यदि आप एक ही पैटर्न का बार-बार उपयोग करते हैं, तो उसे re.compile से कंपाइल करने पर प्रदर्शन बेहतर होता है।
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- यह कोड कई पंक्तियों से उपयोगकर्ता नाम और आईडी निकालने के लिए एक कंपाइल्ड रेगुलर एक्सप्रेशन का उपयोग करता है।
re.compileएक ही पैटर्न के पुन: उपयोग पर दक्षता बढ़ाता है और कोड को अधिक पठनीय भी बनाता है।
अनुप्रयोग
उदाहरण के लिए, एक स्क्रिप्ट पर विचार करें जो एक टेक्स्ट फाइल से सभी ईमेल पतों को निकालती है।
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- यह कोड स्ट्रिंग में सभी ईमेल पते ढूँढता है और उन्हें सूची के रूप में निकालता है।
निष्कर्ष
re मॉड्यूल पाइथन में स्ट्रिंग जोड़-तोड़ के लिए एक शक्तिशाली उपकरण है। यहाँ, हमने समूह और फ्लैग विकल्पों का उपयोग करते हुए बुनियादी उपयोग से लेकर उन्नत नियमित अभिव्यक्तियों तक का व्यापक दायरा शामिल किया है। पायथन की नियमित अभिव्यक्तियाँ अत्यधिक शक्तिशाली हैं और टेक्स्ट प्रोसेसिंग के लिए एक अनिवार्य उपकरण हैं।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।