Nabori znakov v regularnih izrazih Python
Skupine znakov \d in \w niso
zelo prilagodljive. Celo tako preprosta naloga,
kot je poisci vse črke, ne pa številk -
ne more biti rešena z njimi. Za takšne naloge
je priporočljivo uporabiti oglate oklepaje,
ki predstavljajo operacijo 'ali'.
Oglati oklepaji nadomeščajo en
znak, katerikoli od naštetih znotraj. Na
primer, takole: x[abc]x -
povemo, da morajo na robovih stati črke
x, znotraj pa - en znak: ali 'a',
ali 'b', ali 'c'.
Za oglatimi oklepaji lahko pišemo
operatorje ponavljanja. Na primer, takole:
x[abc]+x - povemo, da znotraj
x-ov je lahko poljubno število znakov
'a', 'b' in 'c' - v
poljubnih kombinacijah.
Lahko ne samo naštevamo znake, ampak
tudi ustvarjamo skupine znakov, tako da zapišemo med
dvema znakoma vezaj. Na primer, takole:
[a-d] - dobimo vse znake od
'a' do 'd'.
Poglejmo si primere.
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli črka od
'a' do 'z':
Rezultat izvajanja kode:
'! ! ! x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli črka od
'a' do 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! xmx x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli črka od
'A' do 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'xax ! xcx x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli številka od 0
do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'xax ! ! ! x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli številka od 3
do 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'xax x1x ! ! x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli črka od
'a' do 'z' ali številka od
1 do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! ! ! x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli črka od
'a' do 'z' ali črka od
'A' do 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! ! x5x x@x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji katera koli črka od
'a' do 'z' ali številki 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! ! ! x3x'
Primer
V tem primeru je vzorec iskanja videti
takole: med x-ji črke od 'a'
do 'z' v količini od 1 in
več:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Rezultat izvajanja kode:
'xx ! ! ! x123x xa3x'
Primer
Naredimo tako, da je lahko število črk tudi nič:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Kot rezultat bomo dobili:
'! ! ! ! x123x xa3x'
Primer
Znotraj oglatih oklepajev lahko tudi navedemo escapane znake. Poiščimo zaporedje črk in številk, ki se ponavlja nič ali večkrat:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Rezultat izvajanja kode:
'! x@x ! ! !'
Primer
Če pa moramo navesti še ene oglate oklepaje, jih tudi obvezno escapamo:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Rezultat izvajanja kode:
'! ! ! x3x'
Praktične naloge
Podan niz:
txt = 'aba aea aca aza axa'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - črka 'b',
'e' ali 'x'.
Podan niz:
txt = 'a1a a3a a7a a9a aba'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - številka od
3 do 6.
Podan niz:
txt = 'aba aea afa aha aga'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - črka od
'a' do 'g'.
Podan niz:
txt = 'aba aea afa aha aga'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - črka od
'a' do 'f' in od 'j'
do 'z'.
Podan niz:
txt = 'aAa aea aEa aJa a3a'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - črka od
'a' do 'f' in od 'A'
do 'D'.
Podan niz:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - male
latinične črke, ne da bi prizadel ostale.
Podan niz:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - male in
velike latinične črke, ne da bi prizadel
ostale.
Podan niz:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napišite regularni izraz, ki bo poiskal po
naslednjem vzorcu: na robovih stojita črki
'a', med njima pa - male
latinične črke in številke, ne da bi prizadel
ostale.