Regularni izrazi
This presentation is the property of its rightful owner.
Sponsored Links
1 / 18

REGULARNI IZRAZI PowerPoint PPT Presentation


  • 89 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Regularni izrazi

REGULARNI IZRAZI


To su regularni izrazi

Što su regularni izrazi?

  • Ukratko rečeno, regularni izraz je objekt koji odgovara nekom skupu stringova.


Primjene

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.


Primjene1

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 [email protected] nisu valjane e-mail adrese.


Primjene2

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.


Primjene3

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...”

  • ...


Gdje ih ve koristite

Gdje ih već koristite

  • pretraživanje i zamjene u tekstualnim editorima

  • pretraživanje datoteka (npr. *.mp3)

  • pretraživanje interneta


Ri u python u

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”.


Ri u python u1

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.


Posebni znakovi

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 \., \*...


Posebni znakovi1

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...


Posebni nizovi znakova

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


Zastavice

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.


Funkcije u modulu re py

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.


Funkcije u modulu re py1

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


Ri objekt

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


Podudarni objekt

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))


Primjeri

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=["[email protected]","[email protected]",\

    "[email protected]","[email protected]","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!"


  • Login