Simbolių rinkiniai Python reguliariosiose išraiškose
Simbolių grupės \d ir \w nėra
labai lankstūs. Net toks paprastas uždavinys,
kaip rasti visas raides, bet ne skaičius -
negali būti išspręstas jų pagalba. Tokiems uždaviniams
reikėtų naudoti laužtinius skliaustus,
kurie atstovauja 'arba' operaciją.
Laužtiniai skliaustai pakeičia vieną
simbolį, bet kurį iš išvardintų viduje. Pavyzdžiui,
štai taip: x[abc]x - mes
sakome, kad kraštuose turi būti raidės
x, o viduje - vienas simbolis: arba 'a',
arba 'b', arba 'c'.
Po laužtinių skliaustų galima rašyti
kartojimo operatorius. Pavyzdžiui, štai taip:
x[abc]+x - mes sakome, kad viduje
x gali būti bet koks simbolių skaičius
'a', 'b' ir 'c' -
bet kokiuose deriniuose.
Galima ne tik išvardyti simbolius, bet
ir kurti simbolių grupes, rašant tarp
dviejų simbolių brūkšnį. Pavyzdžiui, štai taip:
[a-d] - mes gauname visus simbolius nuo
'a' iki 'd'.
Pažiūrėkime į pavyzdžius.
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri raidė nuo
'a' iki 'z':
Kodo vykdymo rezultatas:
'! ! ! x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri raidė nuo
'a' iki 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! xmx x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri raidė nuo
'A' iki 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'xax ! xcx x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri skaitmuo nuo 0
iki 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'xax ! ! ! x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri skaitmuo nuo 3
iki 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'xax x1x ! ! x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri raidė nuo
'a' iki 'z' arba skaitmuo nuo
1 iki 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! ! x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri raidė nuo
'a' iki 'z' arba raidė nuo
'A' iki 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! x5x x@x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x bet kuri raidė nuo
'a' iki 'z' arba skaitmenys 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! ! x3x'
Pavyzdys
Šiame pavyzdyje paieškos šablonas atrodo
taip: tarp x raidės nuo 'a'
iki 'z' kiekis nuo 1 ir
daugiau:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'xx ! ! ! x123x xa3x'
Pavyzdys
Padarykime taip, kad raidžių kiekis galėtų būti ir nulis:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Rezultate gausime:
'! ! ! ! x123x xa3x'
Pavyzdys
Viduje laužtinių skliaustų taip pat galima nurodyti ekranuotus simbolius. Suraskime raidžių ir skaitmenų seką, kartojamą nulį ar daugiau kartų:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! x@x ! ! !'
Pavyzdys
Jei mums reikia nurodyti dar vienus laužtinius skliaustus, tai juos taip pat būtinai ekranuojame:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! x3x'
Praktiniai uždaviniai
Duota eilutė:
txt = 'aba aea aca aza axa'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - raidė 'b',
'e' arba 'x'.
Duota eilutė:
txt = 'a1a a3a a7a a9a aba'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - skaitmuo nuo
3 iki 6.
Duota eilutė:
txt = 'aba aea afa aha aga'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - raidė nuo
'a' iki 'g'.
Duota eilutė:
txt = 'aba aea afa aha aga'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - raidė nuo
'a' iki 'f' ir nuo 'j'
iki 'z'.
Duota eilutė:
txt = 'aAa aea aEa aJa a3a'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - raidė nuo
'a' iki 'f' ir nuo 'A'
iki 'D'.
Duota eilutė:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - mažosios
lotyniškos raidės, neliesdamos kitų.
Duota eilutė:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - mažosios ir
didžiosios lotyniškos raidės, neliesdamos
kitų.
Duota eilutė:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Parašykite reguliariąją išraišką, kuri ras pagal
šį šabloną: kraštuose yra raidės
'a', o tarp jų - mažosios
lotyniškos raidės ir skaitmenys, neliesdamos
kitų.