Regulaaravaldised

Videos kasutatud slaidid: https://pydoc.pages.taltech.ee/slides/regex/

Paljud erinevad ülesanded on seotud tekstist mingi seaduspärasusele vastava info leidmisega. Näiteks on ülesandeks leida ette antud tekstist kõik meiliaadressid. Regulaaravaldis on formaalne viis tekstis leiduva mustri kirja panemiseks. Mustriks võib näiteks meiliaadress või telefoninumber.

Pythonis on regulaaravaldistega töötamiseks tehtud moodul re.

Regulaaravaldisi kasutatakse kolmel eesmärgil:
  1. Teksti valideerimine: Kontrollida, kas sisend vastab nõuetele. Näiteks parooli keerukus (kontrollida, kas parool sisaldab suuri tähti, numbreid ja erimärke).

  2. Mustrite Otsimine: Leida sisendist kiiresti kindlad mustrid nagu e-posti aadressid, telefoninumbrid ja kindlas vormingus kuupäevad.

  3. Mustrite eemaldamine või asendamine: Asenda tähti või eemaldab numbreid tekstist, tekstitöötluses on regex võimas tööriist.

Peamised regexi komponendid
Karakteri otsing:
  1. Nurksulgudes [abc] leiab ja tagastab kõik sisendist leitud a, b ja c tähed. Katusemärgiga [^abc] tagastab kõik tähed, numbrid ja märgid sisendist, mis pole nurksulgudes. Nurksulgudesse saab panna rohkem kui vaid tähed, näiteks [^a\d] tagastab kõik peale numbrite ja ‘a’ tähe. Kasutades püstkriipsu [cat|mouse] saab otsida pikemat mustrit, muidu on [a|b|c] võrdväärne [abc] mustrile. Otsida saab ka vahemikke nagu [0-9], [a-z] või [A-Zz-a].

  2. ‘predefined character classes’ nagu \d, \w, \s jt ei vaja tegelikult nurksulge. Kui aga jätta üksikud tähed või vahemikud nurksulgudeta, tekiks süntaksiviga.

Korduste otsing:
  1. Loogeliste sulgudega kindla numbrivahemiku või tähestiku vahemiku otsing nagu {n,m}, {n,} või {,m}.

  2. Küsimärk tähistab mustrit, mis võib esineda null või üks kord.. Näiteks r“g?o“ jaoks sobiks nii ‘go’ kui ka ‘g#o’.

  3. Määramata korduste otsimiseks kasutatakse * (null või rohkem kordust) ja + (üks või rohkem kordust)

Vastuste grupeerimine ja Lookahead/Lookbehind:
  1. Erinevalt nurksulgudest, tahavad ümarsulud leida sisendist terve sulgudesisese.

  2. Lookaheadid ja lookbehindid on küll ümarsulgude sees, kuid nende poolt otsitavat sisendit ei tagastata, nad vaid defineerivad missugune peab olema eelnev/järgnev sisend.

Erinevatest võimalikest komponentidest ja otsingumeetoditest on kirjutatud lähemalt järgnevates artiklites: