మాడ్యూల్ పాఠాలు (4/4)
రీ మాడ్యూల్: పైథాన్లో రీజెక్స్
re మాడ్యూల్ పైథాన్లో సాధారణ వ్యక్తీకరణలను బహిర్గతం చేస్తుంది. మీరు ఇప్పటికే తీసుకున్నట్లయితే
ఈ సైట్లోని Regex కోర్సు, మీకు తెలిసిన అన్ని సింటాక్స్లు కనిపిస్తాయి; ఇక్కడ
మేము APIలను చూస్తాము.
ముడి స్ట్రింగ్: 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.finditer
మీరు భారీ టెక్స్ట్ బ్లాక్లో మ్యాచ్లను ప్రాసెస్ చేయాలనుకుంటే, re.findall అన్ని ఎక్స్ట్రాక్ట్ చేసిన మ్యాచ్ స్ట్రింగ్లను కలిగి ఉన్న మెమరీలో జాబితాను కేటాయిస్తుంది. re.finditer()ని ఉపయోగించడం ఉత్తమం, ఇది మ్యాచ్ ఆబ్జెక్ట్ల యొక్క లేజీ ఇటరేటర్ను అందిస్తుంది, కనిష్ట మెమరీని వినియోగిస్తుంది.
దీనిని ప్రయత్నించండి
`టెక్స్ట్ = 'ordine #123, totale €45.50, ricevuta #456'` అందించబడి, స్ట్రింగ్ల జాబితాగా అన్ని ఆర్డర్ నంబర్లను (# తర్వాత అంకెలు) `ఆర్డర్లు`లోకి సంగ్రహించండి. `ఆర్డర్లను` మూల్యాంకనం చేయండి.
సూచనను చూపించు
re.findall(r"#(\\d+)", టెక్స్ట్) — అంకెల కోసం మాత్రమే క్యాప్చర్ గ్రూప్.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
`s = 'టెల్: 06-12345678 e tel: 02-9876'` అందించబడి, అన్ని ఫోన్ నంబర్లను (ఫార్మాట్ \\d+-\\d+) 'XXX' స్ట్రింగ్తో భర్తీ చేసి, `మాస్క్డ్`కి కేటాయించండి. `ముసుగు`ని మూల్యాంకనం చేయండి.
సూచనను చూపించు
re.sub(r"\\d+-\\d+", "XXX", s)
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
అదనపు సవాలు
\`re\` మాడ్యూల్ను దిగుమతి చేయండి. స్ట్రింగ్ \`log_line = "15msలో 404 లోపం"\` నుండి ఒకటి లేదా అంతకంటే ఎక్కువ అంకెలతో కూడిన అన్ని సంఖ్యలను సంగ్రహించండి. జాబితాను \`సంఖ్యలు\`లో నిల్వ చేయండి మరియు దానిని మూల్యాంకనం చేయండి.
సూచనను చూపించు
స్ట్రింగ్ల జాబితాగా అన్ని సంఖ్యలను సంగ్రహించడానికి re.findall(r'\\d+', log_line) ఉపయోగించండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది