Sümbolikomplektid Pythoni regulaaravaldistes
Sümboligrupid \d ja \w ei
ole väga paindlikud. Isegi nii lihtne ülesanne
nagu leida kõik tähed, kuid mitte numbrid -
ei saa nendega lahendatud. Selliste ülesannete jaoks
tuleks kasutada ruutsulgusid,
mis esindavad 'või' operatsiooni.
Ruutsulud asendavad ühe
sümboli, mis tahes loetletut seest.
Näiteks nii: x[abc]x - me
ütleme, et servades peavad olema tähed
x ja seest - üks sümbol: kas 'a',
või 'b', või 'c'.
Pärast ruutsulgusid saab kirjutada
kordusoperaatoreid. Näiteks nii:
x[abc]+x - me ütleme, et x-ide
vahel võib olla suvaline arv sümboleid
'a', 'b' ja 'c' -
suvalistes kombinatsioonides.
Võib mitte ainult loetleda sümboleid, vaid
luua sümboligruppe, kirjutades kahe
sümboli vahele kriipsu. Näiteks nii:
[a-d] - saame kõik sümbolid
alates 'a' kuni 'd'.
Vaatame näidetel.
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline täht
alates 'a' kuni 'z':
Koodi täitmise tulemus:
'! ! ! x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline täht
alates 'a' kuni 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! xmx x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline täht
alates 'A' kuni 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'xax ! xcx x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline number alates 0
kuni 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'xax ! ! ! x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline number alatest 3
kuni 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'xax x1x ! ! x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline täht
alates 'a' kuni 'z' või number alates
1 kuni 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! ! ! x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline täht
alates 'a' kuni 'z' või täht
alates 'A' kuni 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! ! x5x x@x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel suvaline täht
alates 'a' kuni 'z' või numbrid 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! ! ! x3x'
Näide
Selles näites näeb otsimismust välja
nii: x-ide vahel tähed alates 'a'
kuni 'z' koguses alates 1 ja
rohkem:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Koodi täitmise tulemus:
'xx ! ! ! x123x xa3x'
Näide
Teeme nii, et tähtede arv võiks olla ka null:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Tulemusena saame:
'! ! ! ! x123x xa3x'
Näide
Ruutsulgude sees saab ka määrata ekraanitud sümboleid. Leiame tähtede ja numbrite jada, korduva null või mitu korda:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Koodi täitmise tulemus:
'! x@x ! ! !'
Näide
Kui meil on vaja määrata veel ühed ruutsulud, siis me ka need kindlasti ekraanime:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Koodi täitmise tulemus:
'! ! ! x3x'
Praktilised ülesanded
Antud string:
txt = 'aba aea aca aza axa'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - täht 'b',
'e' või 'x'.
Antud string:
txt = 'a1a a3a a7a a9a aba'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - number alates
3 kuni 6.
Antud string:
txt = 'aba aea afa aha aga'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - täht alates
'a' kuni 'g'.
Antud string:
txt = 'aba aea afa aha aga'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - täht alates
'a' kuni 'f' ja alates 'j'
kuni 'z'.
Antud string:
txt = 'aAa aea aEa aJa a3a'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - täht alates
'a' kuni 'f' ja alates 'A'
kuni 'D'.
Antud string:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - väikesed
ladina tähed, puudutamata teisi.
Antud string:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - väikesed ja
suured ladina tähed, puudutamata
teisi.
Antud string:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Kirjutage regulaaravaldis, mis leiab
järgmise mustri järgi: servades on tähed
'a' ja nende vahel - väikesed
ladina tähed ja numbrid, puudutamata
teisi.