Regulaaravaldised
Eelmine
Järgmine

Regulaaravaldised

Operatsioonid regulaaravaldistega

Pythoni regulaaravaldised sarnanevad Perli omadele. Nii mustrid kui stringid võivad olla nii 8-bitised kui unikoodi omad. Regulaaravaldiste moodul on alati kasutatav, teda ei pea eraldi laadima.

Regulaaravaldistes kasutatakse kurakaigast ("\") tähistamaks erikorraldusi või erimärke. See käib vastu Pythoni üldisele ideele kasutada stringides ühesugust märgendust. Nii tuleb näiteks kurakaika tähistamiseks kirjutada regulaaravaldises "\\\\", kuna kurakaika regulaaravaldis on "\\" ja iga kurakaigas on "\\" tavalises Pythoni stringis.

Õnneks on Pythonis võimalus kasutada toorstringi märgendust. Kui string on tähistatud r lipuga, siis ei käsitleta kurakaikad erireeglite kohaselt. Nii on r"\n" kahetäheline string, mis sisaldab kurakaigast ja väikest n tähte, kuid "\n" reavahetus. Tavaliselt estitatakse regulaaravalduste mustrid just r-lippudega stringidena.

Regulaaravaldiste süntaks

Regulaaravaldis võib sisaldada nii tavalisi märke kui erimärke. Kõige lihtsamad regulaaravalised koosnevad ainult tavalistest märkidest, nagu "A", "a", "B", "0". Need vastavad ainult iseendale.

Mõned märgid on erilised, nagu näiteks "|", "(" või "*". Need tähistavad kas mitut tavalist märki või muudavad regulaaravaldise tähendust.

Pythoni regulaaravaldistes kasutatavad erimärgid on järgmised:

"."

(punkt) Vaikimisi tähistab iga märki peale reavahetuse. Kui DOTALL lipp on püsi, siis tähistab iga märki, kaasa arvatud reavahetust.

"^"

(katus) Tähistab stringi algust. MULTILINE režiimis tähistab ka iga märki, mis järgneb vahetult reavahetusele.

"$"

Tähistab stringi lõppu või märki, mis eelneb vahetult reavahetusele. MULTILINE režiimis tähistab ka reavahetusele eelnevat märki. Avaldisele böö vastavad nii 'böö' kui 'bööminghäm', aga avaldisele böö$ vastab ainult 'böö'.

"*"

Kordab vahetult eelnevat avaldist null või enam korda, nii palju kui võimalik. Avaldisele ab* vastavad nii 'a', 'ab', 'abbb' kui ka 'abbbbbbbbbbbbb'.

"+"

Kordab vahetult eelnevat avaldist vähemalt ühe korra, nii palju kui võimalik. Avaldisele ab+ vastavad nii 'ab', 'abbb' kui ka 'abbbbbbbbbbbbb', kuid mitte 'a'.

"?"

Kordab vahetult eelnevat avaldist null või üks kord. Avaldisele ab? vastavad 'a' ja 'ab'.

*?, +?, ??

Avaldised "*", "+", ja "?" on kõik "ahned": neile vastab nii suur hulk teksti kui võimalik. Alati ei ole see sobiv. Olgu meil vaja näiteks leida html-märgendust. Kasutades avaldist <.*> saame vastuseks '<H1>title</H1>', mitte lithsalt '<H1>'. "?" lisamine muudab avaldise minimaaset vastet otsivaks. Eelmise näite puhul tuleks kasutada avaldist .*?, mis viib soovitud tulemuseni.

{m}

Eelnev avaldis esineb täpselt m korda. Nii näiteks avaldis a{6} leiab kuus a-d, aga mitte viit a-d.

{m,n}

Eelnev avaldis esineb m kuni n korda, niipalju kui võimalik. Näiteks avaldisele a{3,5} vastab kolm kuni viis a-d. Kui m ära jätta, siis muutub alumine raja nulliks, kui n ära jätta, siis muutub ülemine raja lõpmata suureks. Näiteks avaldis a{4,}b leiab aaaab ja aaaaaaaaab või kuitahes paljude a-dega analoogilisi stringe, kuid mitte aaab.

Ettevaatust

Koma ei tohi ära jätta, muidu on tegemist eelmise avaldisega!

{m,n}?

Eelnev avaldis esineb m kuni n korda, niipalju kui võimalik. See on eelmise avaldise kasin variant. Nii näiteks vastab kuuemärgilise stringi 'aaaaaa' puhul variandis a{3,5} viis "a"-d, aga a{3,5}? puhul ainult kolm.

"\"

Maskeerib erimärgid (võimaldades otsida/asendada regulaaravaldise kontrollmärke, nagu "*", "?", "?" ja muud) või tähistab eritähendusega märgi algust.

[]

Tähistab tähtede valikut. Need võivad olla ükshaaval üles loetud, või märgitud kui vahemik. Viimasel juhul on märgid eraldatud "-"-ga. Erimärgid on klambrites tavaliste märkide seisuses. Näiteks [aui] vastab a-le, u-le või i-le, [0-9] vastab ükskõik millisele numbrile, [a-z] vastab ükskõik millisele väiketähele. Ka täheklassid on klambrites kasutatavad. Kui on vaja klambritesse panna "]" või "-" märki, siis tuleb need panna kas esimeseks klambrite sees olevaks märgiks või kasutada nende ees kurakaigast. Näiteks []] või [.,\-].

On võimalik tähistada ka valikut, mis leiab kõik märgid, välja arvatud need, mis on klambrite vahel. Selleks pannakse klambrite vahele esimesena katus ("^"). Katus, mis ei ole esimses positsioonis, tähistab lihtsalt katust. Kehtivad ka vahemikud. Näiteks [^1-5] leiab kõik märgid, mis ei ole üks, kaks, kolm, neli ega viis.

"|"

A|B, kus A ja B võivad olla suvalised regulaaravaldised. Vastab kas A-le või B-le. Selliseid avaldisi võib olla mitu üksteise järel. Võib kasutada ka grupi sees. Vastavust kontrollitakse vasakult paremale. See tähendab seda, et kui üks avaldis sobib, siis teist ei hakata enam kontrollima, isegi siis kui see vastaks pikemale stringijadale. Selline omadus teeb "|"-st kasina operaatori.

Selleks, et leida tekstis esinavat "|" märki, kasutatagu kurakaikaga maskeerimist (nagu \|) või märgi klambritesse sulgemist (nagu [|]).

Eelmine
Järgmine
Esileht