ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 4లో పాఠం 4కోర్సులో 32/36~12 min
మాడ్యూల్ పాఠాలు (4/4)

రీ మాడ్యూల్: పైథాన్‌లో రీజెక్స్

re మాడ్యూల్ పైథాన్‌లో సాధారణ వ్యక్తీకరణలను బహిర్గతం చేస్తుంది. మీరు ఇప్పటికే తీసుకున్నట్లయితే ఈ సైట్‌లోని Regex కోర్సు, మీకు తెలిసిన అన్ని సింటాక్స్‌లు కనిపిస్తాయి; ఇక్కడ మేము APIలను చూస్తాము.

ముడి స్ట్రింగ్: r"..."

రీజెక్స్‌లు అనేక బ్యాక్‌స్లాష్‌లను ఉపయోగిస్తాయి (\d, \b, \s). వాటిని ఎల్లప్పుడూ ఇలా వ్రాయండి ** ముడి తీగలు** కాబట్టి మీరు వాటిని రెట్టింపు చేయవలసిన అవసరం లేదు:

Python
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: మొదటి సంఘటనను కనుగొనండి

Python
import re
m = re.search(r"\d+", "ho 42 mele e 17 pere")
m.group()    # '42'
m.start()    # 3
m.end()      # 5

కనుగొనబడితే Match వస్తువును అందిస్తుంది, లేకపోతే None. ఇడియోమాటిక్ నమూనా:

Python
if m := re.search(r"\d+", testo):
    print(m.group())

re.match: స్ట్రింగ్ ప్రారంభంలో మాత్రమే

Python
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: అన్ని సంఘటనలు

Python
re.findall(r"\d+", "ho 42 mele, 17 pere, 3 banane")
# ['42', '17', '3']

నమూనాలో ** క్యాప్చర్ సమూహాలు** ఉంటే, findall సమూహాలను అందిస్తుంది, కాదు మొత్తం మ్యాచ్:

Python
re.findall(r"(\w+)@(\w+)", "ada@x bob@y")
# [('ada', 'x'), ('bob', 'y')]

re.sub: ప్రత్యామ్నాయం

Python
re.sub(r"\d+", "###", "ho 42 mele e 17 pere")
# 'ho ### mele e ### pere'

ఇది రీప్లేస్‌మెంట్ ఫంక్షన్‌తో కూడా పని చేస్తుంది (ఇది మ్యాచ్‌ని అందుకుంటుంది):

Python
re.sub(r"\d+", lambda m: str(int(m.group()) * 2), "ho 42 mele")
# 'ho 84 mele'

పేరు పెట్టబడిన సమూహాలు

Python
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'}

ఉపయోగకరమైన జెండాలు

Python
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()ని ఉపయోగించడం ఉత్తమం, ఇది మ్యాచ్ ఆబ్జెక్ట్‌ల యొక్క లేజీ ఇటరేటర్‌ను అందిస్తుంది, కనిష్ట మెమరీని వినియోగిస్తుంది.

దీనిని ప్రయత్నించండి

వ్యాయామం#python.m8.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

`టెక్స్ట్ = 'ordine #123, totale €45.50, ricevuta #456'` అందించబడి, స్ట్రింగ్‌ల జాబితాగా అన్ని ఆర్డర్ నంబర్‌లను (# తర్వాత అంకెలు) `ఆర్డర్‌లు`లోకి సంగ్రహించండి. `ఆర్డర్‌లను` మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

re.findall(r"#(\\d+)", టెక్స్ట్) — అంకెల కోసం మాత్రమే క్యాప్చర్ గ్రూప్.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#python.m8.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

`s = 'టెల్: 06-12345678 e tel: 02-9876'` అందించబడి, అన్ని ఫోన్ నంబర్‌లను (ఫార్మాట్ \\d+-\\d+) 'XXX' స్ట్రింగ్‌తో భర్తీ చేసి, `మాస్క్‌డ్`కి కేటాయించండి. `ముసుగు`ని మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

re.sub(r"\\d+-\\d+", "XXX", s)

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

అదనపు సవాలు

వ్యాయామం#python.m8.l4.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

\`re\` మాడ్యూల్‌ను దిగుమతి చేయండి. స్ట్రింగ్ \`log_line = "15msలో 404 లోపం"\` నుండి ఒకటి లేదా అంతకంటే ఎక్కువ అంకెలతో కూడిన అన్ని సంఖ్యలను సంగ్రహించండి. జాబితాను \`సంఖ్యలు\`లో నిల్వ చేయండి మరియు దానిని మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

స్ట్రింగ్‌ల జాబితాగా అన్ని సంఖ్యలను సంగ్రహించడానికి re.findall(r'\\d+', log_line) ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది