मॉड्यूल पाठ (4/4)
पुनः मॉड्यूल: पायथन में रेगेक्स
re मॉड्यूल पायथन में नियमित अभिव्यक्ति को उजागर करता है। यदि आपने पहले ही ले लिया है
इस साइट पर रेगेक्स पाठ्यक्रम में आपको सभी सिंटैक्स परिचित मिलेंगे; यहाँ
हम एपीआई को देखते हैं।
कच्ची स्ट्रिंग: r"..."
रेगेक्स कई बैकस्लैश (\d, \b, \s) का उपयोग करते हैं। उन्हें हमेशा ऐसे ही लिखें
कच्चे तार ताकि आपको उन्हें दोगुना न करना पड़े:
import re
# raw: \d is a single token
pattern = r"\d+"
# NOT raw: you would have to write "\\d+" otherwise Python interprets \d as "d"re.search: पहली घटना खोजें
import re
m = re.search(r"\d+", "ho 42 mele e 17 pere")
m.group() # '42'
m.start() # 3
m.end() # 5यदि पाया जाता है तो Match ऑब्जेक्ट लौटाता है, अन्यथा None लौटाता है। मुहावरेदार पैटर्न:
if m := re.search(r"\d+", testo):
print(m.group())re.match: केवल स्ट्रिंग की शुरुआत में
re.match(r"\d+", "42 anni") # match!
re.match(r"\d+", "ho 42 anni") # None (doesn't start with a digit)कहीं भी खोजने के लिए re.search को प्राथमिकता दें।
re.findall: सभी घटनाएँ
re.findall(r"\d+", "ho 42 mele, 17 pere, 3 banane")
# ['42', '17', '3']यदि पैटर्न में कैप्चर समूह है, तो findall समूह लौटाता है, न कि समूह लौटाता है
पूरा मैच:
re.findall(r"(\w+)@(\w+)", "ada@x bob@y")
# [('ada', 'x'), ('bob', 'y')]re.sub: प्रतिस्थापन
re.sub(r"\d+", "###", "ho 42 mele e 17 pere")
# 'ho ### mele e ### pere'यह एक प्रतिस्थापन फ़ंक्शन के साथ भी काम करता है (जो मैच प्राप्त करता है):
re.sub(r"\d+", lambda m: str(int(m.group()) * 2), "ho 42 mele")
# 'ho 84 mele'नामित समूह
m = re.search(r"(?P<anno>\d{4})-(?P<mese>\d{2})-(?P<giorno>\d{2})", "2025-01-15")
m.group("anno") # '2025'
m.groupdict() # {'anno': '2025', 'mese': '01', 'giorno': '15'}उपयोगी झंडे
re.search(r"ciao", "CIAO", re.IGNORECASE) # case-insensitive
re.findall(r"^.+$", testo, re.MULTILINE) # ^/$ match every line
re.search(r"a.b", "a\nb", re.DOTALL) # . matches newline tooस्मृति सुरक्षा के लिए पुनः खोजक
यदि आपको एक विशाल टेक्स्ट ब्लॉक में मिलानों को संसाधित करने की आवश्यकता है, तो re.findall मेमोरी में एक सूची आवंटित करता है जिसमें सभी निकाले गए मिलान स्ट्रिंग्स शामिल हैं। re.finditer() का उपयोग करना पसंद किया जाता है, जो न्यूनतम मेमोरी की खपत करते हुए, मैच ऑब्जेक्ट का एक आलसी पुनरावर्तक उत्पन्न करता है।
इसे अजमाएं
दिए गए `text = 'ordine #123, totale €45.50, ricevuta #456'`, स्ट्रिंग्स की सूची के रूप में सभी ऑर्डर नंबर (# के बाद के अंक) को `ऑर्डर` में निकालें। `आदेश` का मूल्यांकन करें.
संकेत दिखाएँ
re.findall(r"#(\\d+)", text) - केवल अंकों के लिए समूह कैप्चर करें।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
दिया गया `s = 'tel: 06-12345678 e tel: 02-9876'`, सभी फ़ोन नंबर (प्रारूप \\d+-\\d+) को स्ट्रिंग 'XXX' से बदलें और `नकाबपोश' को असाइन करें। 'नकाबपोश' का मूल्यांकन करें।
संकेत दिखाएँ
re.sub(r"\\d+-\\d+", "XXX", s)
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
\`re\` मॉड्यूल आयात करें। स्ट्रिंग \`log_line = "Error 404 in 15ms"\` से एक या अधिक अंकों वाली सभी संख्याएँ निकालें। सूची को \`संख्याओं\` में संग्रहीत करें और उसका मूल्यांकन करें।
संकेत दिखाएँ
स्ट्रिंग की सूची के रूप में सभी नंबर निकालने के लिए re.findall(r'\\d+', log_line) का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है