Grupe simbola u regularnim izrazima Pajton
Postoje posebne komande koje
omogućavaju odabir čitavih grupa
simbola odjednom. Komanda \d označava cifru
od 0 do 9. Komanda \w
označava cifru, latinično slovo ili znak
donje crte. Komanda \s označava
prazninu ili beli znak: razmak,
prelazak u novi red, tabulator. Možete invertovati
značenje komande, tako što ćete napisati veliko slovo:
na primer, ako je \d - cifra, onda je
\D - nije cifra.
Primer
Pronađimo sve cifre:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! !! !!!'
Primer
Operatori ponavljanja tretiraju komande-grupe
kao jednu celinu, odnosno grupisane zagrade
nisu potrebne. U sledećem primeru obrazac pretrage
izgleda ovako: cifra od 0 do
9 jedan ili više puta:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! abc @@@'
Primer
U sledećem primeru obrazac pretrage izgleda
ovako: bilo šta jedan ili više puta,
ali ne cifra od 0 do 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Rezultat izvršavanja koda:
'123!3!'
Primer
U ovom primeru obrazac pretrage izgleda ovako: beli znak jedan put:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Rezultat izvršavanja koda:
'1!12!123!abc!@@@'
Primer
U ovom primeru obrazac pretrage izgleda
ovako: Nije beli znak jedan ili više
puta. Svi podnisovi, odvojeni
razmacima, biće zamenjeni sa '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! ! !'
Primer
U ovom primeru obrazac pretrage izgleda
ovako: cifra ili slovo jedan ili više
puta. Svi podnisovi, koji se sastoje od cifara
i slova, biće zamenjeni sa '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! ! @@@'
Primer
U ovom primeru obrazac pretrage izgleda
ovako: NIJE cifra i NIJE slovo jedan ili više
puta. Pod ovu definiciju u našem
slučaju spada '@@@' i svi razmaci
(oni takođe nisu cifre niti slova).
Obratite pažnju na to da je na kraju jedan
'!' - u njega se transformisala niska
' @@@' - sa razmakom ispred:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Rezultat izvršavanja koda:
'1!12!123!Abc!'
Praktični zadaci
Data je niska:
txt = 'a1a a2a a3a a4a a5a aba aca'
Napišite regularni izraz koji će pronaći niske,
u kojima sa obe strane stoje slova 'a',
a između njih jedna cifra.
Data je niska:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Napišite regularni izraz koji će pronaći niske,
u kojima sa obe strane stoje slova 'a',
a između njih bilo koja količina cifara.
Data je niska:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Napišite regularni izraz koji će pronaći niske,
u kojima sa obe strane stoje slova 'a',
a između njih bilo koja količina cifara (uključujući
i nula cifara, odnosno niska
'aa').
Data je niska:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Napišite regularni izraz koji će pronaći niske
sledećeg oblika: sa obe strane stoje slova
'a' i 'b', a između njih -
nije broj i nije razmak.
Data je niska:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Napišite regularni izraz koji će pronaći niske
sledećeg oblika: sa obe strane stoje slova
'a' i 'b', a između njih -
nije slovo, nije cifra i nije razmak.
Data je niska:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Napišite regularni izraz koji će zameniti sve
razmake sa '!'.