Skupovi karaktera u regularnim izrazima Pajtona
Grupe karaktera \d i \w nisu
veoma fleksibilne. Čak ni tako jednostavan zadatak,
kao pronaći sva slova, ali ne brojeve -
ne može biti rešen njima. Za takve zadatke
treba koristiti uglaste zagrade,
koje predstavljaju operaciju 'ili'.
Uglaste zagrade zamenjuju jedan
karakter, bilo koji od navedenih unutra. Na
primer, ovako: x[abc]x - mi
kažemo da na krajevima treba da budu slova
iks, a unutra - jedan karakter: ili 'a',
ili 'b', ili 'c'.
Posle uglastih zagrada može se pisati
operatori ponavljanja. Na primer, ovako:
x[abc]+x - mi kažemo da unutra
iksova može biti bilo koja količina karaktera
'a', 'b' i 'c' - u
bilo kojoj kombinaciji.
Može se ne samo navoditi karaktere, već
i kreirati grupe karaktera, pišući između
dva karaktera crticu. Na primer, ovako:
[a-d] - mi dobijamo sve karaktere od
'a' do 'd'.
Hajde da pogledamo na primerima.
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koje slovo od
'a' do 'z':
Rezultat izvršavanja koda:
'! ! ! x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koje slovo od
'a' do 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! xmx x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koje slovo od
'A' do 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'xax ! xcx x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koji broj od 0
do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'xax ! ! ! x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koji broj od 3
do 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'xax x1x ! ! x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koje slovo od
'a' do 'z' ili broj od
1 do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! ! x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koje slovo od
'a' do 'z' ili slovo od
'A' do 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! x5x x@x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova bilo koje slovo od
'a' do 'z' ili brojevi 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! ! x3x'
Primer
U ovom primeru šablon pretrage izgleda
ovako: između iksova slova od 'a'
do 'z' u količini od 1 i
više:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'xx ! ! ! x123x xa3x'
Primer
Učinimo da količina slova može biti i nula:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Kao rezultat, dobićemo:
'! ! ! ! x123x xa3x'
Primer
Unutar uglastih zagrada takođe se može navoditi ekranizovani karakteri. Hajde da pronađemo sekvencu slova i brojeva, ponavljajuću nula ili više puta:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! x@x ! ! !'
Primer
Ako nam treba da navedemo još jedne uglaste zagrade, onda ih i mi obavezno ekraniramo:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Rezultat izvršavanja koda:
'! ! ! x3x'
Praktični zadaci
Data je niska:
txt = 'aba aea aca aza axa'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - slovo 'b',
'e' ili 'x'.
Data je niska:
txt = 'a1a a3a a7a a9a aba'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - broj od
3 do 6.
Data je niska:
txt = 'aba aea afa aha aga'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - slovo od
'a' do 'g'.
Data je niska:
txt = 'aba aea afa aha aga'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - slovo od
'a' do 'f' i od 'j'
do 'z'.
Data je niska:
txt = 'aAa aea aEa aJa a3a'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - slovo od
'a' do 'f' i od 'A'
do 'D'.
Data je niska:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - mala
latinična slova, ne dotičući ostalih.
Data je niska:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - mala i
velika latinična slova, ne dotičući
ostalih.
Data je niska:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napišite regularni izraz koji će pronaći po
sledećem šablonu: na krajevima stoje slova
'a', a između njih - mala
latinična slova i brojevi, ne dotičući
ostalih.