Uvod u jezik PYTHON

(priručnik za  predmet "Skript jezici")


© Matematički fakultet

Miljana Mladenović, Duško Vitas

O Python-u
Instalacija
Sintaksa jezika Python
Osnovne osobine
Službene reči
Operatori i njihovi prioriteti
Osnovne algoritamske strukture
Blok naredbi
if struktura
while struktura
Iskazi: break, continue, pass
Tipovi podataka u Python-u
Osnovni i ugradjeni tipovi
Brojevi
Konverzija formata
Neke matematičke funkcije
Neke random funkcije
Niske
Neke funkcije nad niskama
Formatiranje niski
Liste
Torke
Osnovni izrazi sa torkama
Rečnici
Skupovi
Operacije nad skupovima
Datoteke
Funkcije modula os za rad sa datotekama
Funkcije modula os za rad sa folderima
Izuzeci
Funkcije
Moduli
Paketi
Klase
Regularni izrazi
Baze podataka
Primeri u Netbeans-u

Regularni izrazi:

     

Regularni izrazi predstavljaju jezičko produženje i proširenje funkcionalnosti džokerskih znakova (*, ? i %).  Predstavljaju važan i značajan alat u obradi prirodnih jezika. Njihova uloga je da

  • obezbede jednostavan način za definisanje šablona (uzorka) po kome će se kreirati određeni tekstualni podaci
  • na osnovu utvrđenih šablona (uzoraka) izvrše proveru da li dati tekstualni podatak svojom strukturom zadovoljava strukturu datu šablonom
  • pronađu u datom tekstu sve one delove koji zadovoljavaju svojom strukturom postavljeni šablon (uzorak)

     

Iako se posebno koriste u oblast NLP-a, nastanak regularnih izraza (regexp ili regex) vezuje se za teoriju automata i teoriju formalnih jezika i 1950. godinu kada je matematičar Stephen Kleene upotrebio set metakaraktera i nazvao ih regularni skupovi. Razvoj je nastavljen kada je Ken Thompson implementirao ove skupove u Unix editor teksta ed. Implementacija se nastavila u raznim alatima na Unix platformi, da bi bila prihvaćena i od jezika kao što su Perl i Python.

Regex karakterišu:

  • skup metakaraktera kojima se formiraju regularni izrazi
  • skup pravila za generisanje šablona (uzoraka)

     

Metakarakteri su:

. ^ $ * + ? { } [ ] \ | ( )

     

Metakarakter          Značenje

     


[ ]   Bilo koji znak naveden unutar zagrada [ ]. Ako se metakarakter nađe unutar [ ], tretira se kao običan znak.

     

^     Početak unosa ili reda. Ako skup znakova unutar [ ] počne ovim znakom,

  radi se o komplementarnom skupu datom

     

$     Kraj unosa ili reda.

     

*     Prethodni znak ponovljen 0 ili više puta. (Kleene-ova zvezdica)

     

+     Prethodni znak ponovljen 1 ili više puta. (Kleene-ov plus)

     

?    Prethodni znak ponovljen 0 ili 1 put.

     

.    Jedan znak osim znaka za prelaz u novi red.

     

|     Izbor između dva regularna izraza data sa leve i desne strane oznake.

     

( )   Grupa znakova za koju se definiše tačan redosled pojavljivanja

     

-    Grupa znakova u opsegu između prvonavedenog i drugonavedenog, zaključno

     

\     Znak kojim se poništava uloga metakaraktera i on tretira kao običan znak.

      Ako se nađe ispred određenog znaka, formira predefinisanu sekvencu.

     

{ }  Prethodni znak ponovljen onako kako je definisano unutar zagrada

     

Predefinisane specijalne sekvence:

\w         Pronalazi bilo koji znak koji je slovo, broj ili donja crta ( _ ).

\W         Pronalazi bilo koji znak koji nije slovo, broj ili donja crta ( _ ).

\d         Pronalazi brojeve.

\D         Pronalazi bilo koji znak koji nije broj.

\A         Pronalazi početak niske.

\z         Pronalazi kraj niske.

\Z         Pronalazi kraj niske.Ako postoji znak za prelaz u novi red,

           pronalazi znak pre njega.

\s         Pronalazi razmake i tabulatore.   [\t\n\r\f\v]

\S         Pronalazi bilo koji znak koji nije razmak ili tabulator.   

\b         Pronalazi podudaranje na početku ili\i kraju reči – granica reči.

\B         Pronalazi podudaranje osim na početku ili\i kraju reči

\0         Pronalazi null znak

\n         Pronalazi znak novog reda

\f         Pronalazi novi red

\r         Pronalazi znak za povratak

\t         Pronalazi znak za tabulator

\v         Pronalazi vertikalni tabulator

\xxx       Pronalazi znak naveden mimo oktalnog broja xxx

\xdd       Pronalazi znak naveden mimo heksadecimalnog broja dd

\uxxxx     Pronalazi Unicode znak naveden mimo heksadecimalnog broja xxxx

     

Primeri regularnih izraza:

Regularni izraz                 Tekst koji zadovoljava regularni izraz

Pera                    Pera

[Oo]lovka               Olovka, olovka

olovk[ae]               olovka, olovke

[Pera]                  P,e,r,a         bilo koje slovo od navedenih          

[0-6]                   0,1,2,3,4,5,6   bilo koja cifra iz datog opsega cifara

[a-z]                    a,b,c,...,z     bilo koje malo slovo iz ASCII opsega

[A-Z]                    A,B,C,...,Z     bilo koje veliko slovo iz ASCII opsega

[a-zA-Z0-9]              sva slova i cifre

[^a-z]                   sve osim malih slova

[^0-9]                   sve osim cifara

[^\.]                    sve osim tačke

[^0-9]                   sve osim cifara

Pera|Mika                ili Pera ili Mika

(Pera)                   Pera

(pera|o)                 pera ili pero

An*                             An, Ana,Anaa, Anaaa, Anaaaa,...

An?                             An, Ana

An+                             Ana, Anaa, Anaaa, Anaaaa,...

Ana{4}                          Anaaaa

Ana{1,3}                        Ana, Anaa, Anaaa

[+|-]*[0-9]+\.[0-9][0-9] Decimal. broj sa 2 decimale: 3.45  +21.76 -143.78

A.a                             Ana, Aca, Aga, Aba, ...

^D                              “Dobro jutro”

$D                              “pazi, zasad”

\bs                             “svejedno”

\Βs                             “posebno”, “danas”

\d                              “nov.27.”, “27.nov.”,...

\D                              “12!AS” daje “!AS”

\D                              “12!AS” daje “!AS”

\ssprat                         “prvi sprat”, ali ne i “polusprat”

\b[w.-]+@[w.-]+(\. [\w.-]+)*\. e-mail adrese

<a[^>]*>(.*?)</a>               html linkovi

/^\d{1,2}(\.|\/|\-)\d{1,2}(\.|\/|\-)\d{4}$/         datumi: 21.11.2010   4/4/2010

                                                            17-9-2009   

     

     

U Pathon-u postoji modul re za podršku regularnih izraza, importuje se kod upotrebe.

 >>> import re

Modul  re  ima funkcije od  kojih su najvažnije:

compile, findall, finditer, match, purge, search, split, sub, template.

     

Funkcija match:

re.match(pattern, string, flags=0)

     

pattern  je regularni izraz koji treba zadovoljiti

string je tekst nad kojim se vrši pretraživanje

flags je skup modifikatora koji bliže opisuju uslove traženja.

     

     

Ukoliko je funkcija uspešno izvršena, vratiće match objekte koje je pronašla. Ukoliko ne nađe nijedan objekat koji zadovoljava uslov pattern  vratiće vrednost None.

     

Mogu se koristiti i funkcije group(num)  ili  groups() match  objekta. Funkcijom  group(num)  se mogu vratiti sva pronađena slaganja istovremeno ili pojedinačno, ako se zada parametar num kao redni broj grupe. Funkcija   groups() vraća u obliku torke sva pronađena podudaranja.

     

     

     

Skup modifikatora(flags)

     

Modifikator              Opis

     


re.I              Obezbeđuje nerazlikovanje velikih i maloh slova.

re.L              Ineterpretira i reči lokalnog jezika. Ima uticaja na:   w   \W   \b  i  \B.

re.M              Obezbeđuje da $ podudara sa krajem linije, a ne samo niske. Obezbeđuje da znak podudara sa početkom  linije, a ne samo niske

re.S              Obezbeđuje da tačka ( . ) podudara sa bilo kojim karakterom uključujući i znak za novi red.

re.U              Tretira slova prema Unicode karakter setu. Ima uticaja na:  w \W  \b  i  \B.

re.X              Dozvoljava "cuter" regex sintaksu. Ignoriše blanko znake (beline)

       (sem unutar seta karaktera unutar  [ ] ili kada se neutrališe znakom \),

       i tretira # kao komentar.

     

Funkcija search:

     

re.search(pattern, string, flags=0)

     

Funkcija match proverava slaganje upoređujući početak niske, a funkcija search proverava slaganje bilo gde u tekstu.

     

Funkcija zamene (sub)

     

re.sub(pattern, repl, string, max=0)

     

Funkcija zamene (sub) zamenjuje sva pojavljivanja RE šablona (uzorka) koje nađe u niski tekstom  repl. Kao rezultat vraća modifikovanu nisku.

     

 

Beograd, novembar 2010.