1 / 18

REGULARNI IZRAZI

REGULARNI IZRAZI. Što su regularni izrazi?. Ukratko rečeno, regularni izraz je objekt koji odgovara nekom skupu stringova. Primjene. traženje dvostrukih riječi Nekad je ponavljanje riječi namjerno, na primjer: Luka luka jede. Ali, ponekad se desi sljedeće: On je je Luka.

saman
Télécharger la présentation

REGULARNI IZRAZI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. REGULARNI IZRAZI

  2. Što su regularni izrazi? • Ukratko rečeno, regularni izraz je objekt koji odgovara nekom skupu stringova.

  3. Primjene • traženje dvostrukih riječi Nekad je ponavljanje riječi namjerno, na primjer: Luka luka jede. Ali, ponekad se desi sljedeće: On je je Luka. U ovom slučaju je ponavljanje riječi “je” greška koju se može pronaći pomoću regularnih izraza.

  4. Primjene • provjera unosa u formama Pri unosu podataka na često se dogodi da uneseni podaci ne odgovaraju oblikom željenim podacima. Na primjer, za unos e-mail adrese, očekuje se da ona u sebi sadrži znak @ i nakon njega ime domene. Tako “pperic.mathos.hr”, ili “pperic@mathos” nisu valjane e-mail adrese.

  5. Primjene • mijenjanje zapisa datuma Pri prevođenju raznih tekstova, nailazimo na razne oblike zapisa datuma. Na primjer, Božić 2001. godine se u SAD-u zapisuje ovako: 12/25/2001, dok je kod nas uobičajeni zapis 25.12.2001.

  6. Primjene • traženje nepravilnosti s velikim ili malim slovima Pri pisanju se često desi da na početku rečenice napišemo na primjer “DObar dan...” • ...

  7. Gdje ih već koristite • pretraživanje i zamjene u tekstualnim editorima • pretraživanje datoteka (npr. *.mp3) • pretraživanje interneta

  8. RI u Python-u • U Python-u za rad s regularnim izrazima koristi modul re.py. Ovaj modul omogućava rad s RI sličan onome u Perl-u. Omogućava rad i s 8-bitnim i Unicode stringovima. • RI u Python-u su obično definirani pomoću raw stringova i mogu sadržavati posebne i obične znakove. Obični znakovi poput “A”, “a” ili “0” su najjednostavniji regularni izrazi; oni odgovaraju sami sebi. Obični znakovi se mogu spajati, pa RI kraj odgovara stringu “kraj”.

  9. RI u Python-u • RI u Python-u možemo koristiti na više načina. U slučaju da želimo samo jednu provjeru funkcije za usporedbu pozivamo izravno. Ako želimo (kao u većini slučajeva) provjeravati da li se više stringova podudara s RI, onda ga kompajliramo u RI objekt koji ima gotovo iste metode kao i izravne funkcije.

  10. Posebni znakovi • . odgovara bilo kojem znaku osim oznake kraja linije • ^ odgovara početku stringa • $ odgovara kraju stringa • * odgovara o ili više (greedy) ponavljanja prethodnog RI (greedy znači da uzima što više može ponavljanja) • +odgovara 1 ili više (greedy) ponavljanja prethodnog RI • ?odgovara o ili 1 (greedy) ponavljanja prethodnog RI • *?, +?, ??su ne-greedy verzije prethodna tri znaka • {m,n} odgovara m do n ponavljanja prethodnog RI • {m,n}?je ne-greedy verzija prethodnog izraza • \\ podudara se s backslash-em. Slično i \., \*...

  11. Posebni znakovi • []označava skup znakova. Ako se unutar zagrada prvi pojavi znak ^, označava komplement skupa. • |A|B, odgovara ili A ili B (gdje su A i B RI) • (...) odgovara RI unutar zagrada i označava grupu. Sadržaj se može dohvatiti ili usporediti kasnije u stringu. • (?iLmsux)postavlja I, L, M, S, U, ili X zastavice regularnog izraza • (?:...)Negrupirajuća verzija običnih zagrada • (?P<name>...)Podstring koji odgovara grupi može se pozvati imenom • (?P=name)uspoređuje tekst koji odgovara prije pozvanoj grupi name • (?#...)Komentar, zanemaruje se pri uspoređivanju • (?=izraz)odgovara, ako izraz odgovara sljedećem tekstu, ali ne “jede” string • (?!izraz)odgovara, ako izraz ne odgovara sljedećem tekstu • i još nekoliko...

  12. Posebni nizovi znakova • Posebni niz znakova sastoje se od \ i nekog od dolje navadenih znakova. Ako obični znak nije dolje naveden tada tako dobiven RI odgovara tom znaku. • \1, \2... odgovara numeriranoj grupi istog broja. Ako dio RI zatvorimo u zagrade, Python tu grupu numerira brojem od 1 do 99. • \Apodudara se samo na početku stringa; ekvivalentno ^ • \Zpodudara se samo na kraju stringa; ekvivalentno $ • \bodgovara praznom stringu, ali samo na početku ili kraju riječi • \B odgovara praznom stringu, ali ne na početku ili kraju • \dodgovara bilo kojoj znamenci;ekvivalentno skupu[0-9] • \Dodgovara bilo kojoj ne-znamenci;ekvivalentno skupu[^0-9] • \sodgovara bilo kojem nevidljivom znaku; ekvivalentno[ \t\n\r\f\v] • \S odgovara bilo kojem ne-nevidljivom znaku; ekvivalentno[^ \t\n\r\f\v] • \wodgovara bilo kojem alfanumeričkom znaku; ekvivalentno[a-zA-Z0-9_] S LOCALE, odgovarat će skupu [0-9_]i znakovima definiranim kao lokalna slova. • \Wodgovara komplementu od \w • \\odgovara literalu backslash

  13. Zastavice • I ili IGNORECASE Pretraga nije osjetljiva na velika i mala slova. • L ili LOCALE \w, \W, \b, \B, \si\Sovise o trenutnom locale-u. • M ili MULTILINE Po defaultu ^ i $ odgovaraju početku i kraju stringa. S ovom zastavicom mogu odgovarati i početku i kraju reda višelinijskog stringa. • S ili DOTALL . s ovom zastavicom odgovara bilo kojem znaku (pa i \n). • U ili UNICODE \w, \W, \b, \B, \d, \D, \si\Sovise o bazi svojstava Unicode znakova. • X ili VERBOSE Omogućava ljepše pisanje regularnih izraza. Nevidljivi znakovi se ignoriraju, osim kada su u klasi znakova ili ako im prethodi \. Ako linija sadrži # koji nije u klasi znakova niti mu prethodi \, sve nakon toga se zanemaruje.

  14. Funkcije u modulu re.py • compile(pattern[, flags]) Kompajlira regularni izraz pattern u RI objekt. Ponašanje izraza se može promijeniti koristeći razne zastavice (flags) odvojene znakom |. Naredbe prog=re.compile(pat) result=prog.match(str) su ekvivalentne naredbi result=re.match(pat,str) ali je compile način učinkovitiji ako se ista provjera vrši više puta u jednom programu. • match(pattern, string[, flags=0])uzorak pattern uspoređuje s prvih 0 ili više znakova stringa i, ako se podudaraju, vraća podudarni objekt, a inače None. • search(pattern, string[, flags=0])prolazi kroz string tražeći podudarnost s uzorkom pattern. Vraća podudarni objekt ako ga nađe, inače None.

  15. Funkcije u modulu re.py • sub(pattern, repl, string[, count=0]) vraća string dobiven zamjenjivanjem najljevije nepreklapajuće pojave uzorka u stringu sa zamjenom repl. repl može biti string ili funkcija. Ako je funkcija, zamjenjuje se stringom koji ta funkcija vrati ako se pozove sa stringom koji se podudara kao argumentom.Opcionalni count određuje najveći broj zamjena. • subn(pattern, repl, string[, count]) radi isto kao i sub, samo što vraća uređeni par (string, broj_zamjena). • split(pattern, string[, maxsplit=0])cijepa string po pojavama uzorka i vraća listu. Ako u uzorku stavimo grupirajuće zagrade, ispisuju se i sve pojave uzorka. Ako je maxsplit pozitivan, string se cijepa najviše toliko puta. • findall(pattern,string[,flags])vraća listu svih nepreklapajućih podudarnosti s uzorkom u stringu. Ako su grupe prisutne u RI, vraća listu grupa. • finditer(pattern, string[, flags]) vraća iterator po svim podudarnostima stringa s RI. • još neke manje važne funkcije

  16. RI objekt • Kao što je već rečeno, funkcija compile() vraća RI objekt. On ima sljedeće metode: • match(string[, pos[, endpos]])RI uspoređuje s prvih 0 ili više znakova stringa i, ako se podudaraju, vraća podudarni objekt, a inače None. Opcionalni argimenti pos i endpos označavaju od kojeg do kojeg znaka u stringu se traži uzorak. • search(string[, pos[, endpos]]) prolazi kroz string tražeći podudarnost s uzorkom pattern. Vraća podudarni objekt ako ga nađe, inače None.Opcionalni argimenti pos i endpos označavaju od kojeg do kojeg znaka u stringu se traži uzorak. • split, sub, subn, findall i finditer su identični onima u modulu re.py. • još neke manje važne

  17. Podudarni objekt • Većina funkcija modula re.py vraća podudarni objekt. Ovo su njegove metode: • group([group1, ...]) vraća jednu ili više podudarnih grupa. • groups([default]) vraća n-torku svih podgrupa podudaranja. • groupdict([default]) vraća rječnik koji sadrži sve imenovane podgrupe podudaranja, gdje si ključevi imena grupa. • start([group]) i end([group]) vraćaju indekse početka i kraja podstringa koji odgovara grupi group. • span([group]) Za podudarni objekt (MatchObject) m vraća uređeni par (m.start(group),m.end(group))

  18. Primjeri ‘a.b’ odgovara stringovima “alb” i “aqb”, ali ne i “a\nb” ili “ahab”. Sa zastavicom DOTALL, odgovarao bi i stringu “a\nb”. ‘ba*n*’ odgovara stringovima “b”, “baaaa” i “bannn”. ‘ba+n+’ odgovara “bannn”, ali ne “b” i “baaaa”. ‘n[ao]s’ odgovara samo stringovima “nas” i “nos”. ‘n[^ao]s’ ne odgovara stringovima “nas” i “nos”, a odgovara npr. “n%s”. • Jednostavno provjeravanje e-mail adresa: from re import * emailovi=["ivazler@mathos.hr","Vazler_I@yahoo.com",\ "Nesto@negdje","ja@ti.hrvat","Malo.puno.hr"] emailRI=compile(r"(\w+)@(\w+)\.(\w{2,3})$") for email in emailovi: nasao=emailRI.match(email) if nasao: print "Dobar e-mail, "+nasao.group(1)+"!" else: print "Ne valja!"

More Related