Množiny znakov v regulárnych výrazoch Python
Skupiny znakov \d a \w nie sú
veľmi flexibilné. Dokonca aj taká jednoduchá úloha,
ako nájsť všetky písmená, ale nie číslice -
nemôže byť vyriešená nimi. Pre takéto úlohy
by sa mali použiť hranaté zátvorky,
ktoré predstavujú operáciu 'alebo'.
Hranaté zátvorky nahrádzajú jeden
znak, ktorý môže byť ľubovoľný z uvedených vnútri. Napríklad, takto: x[abc]x -
hovoríme, že na okrajoch musia stáť písmená
x, a vnútri - jeden znak: buď 'a',
alebo 'b', alebo 'c'.
Za hranatými zátvorkami je možné písať
operátory opakovania. Napríklad, takto:
x[abc]+x - hovoríme, že vnútri
x môže byť ľubovoľný počet znakov
'a', 'b' a 'c' - v
ľubovoľných kombináciách.
Je možné nielen vymenovávať znaky, ale
aj vytvárať skupiny znakov zápisom medzi
dvoma znakmi pomlčku. Napríklad, takto:
[a-d] - získame všetky znaky od
'a' do 'd'.
Pozrime sa na príklady.
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľné písmeno od
'a' do 'z':
Výsledok vykonania kódu:
'! ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľné písmeno od
'a' do 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! xmx x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľné písmeno od
'A' do 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'xax ! xcx x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľná číslica od 0
do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'xax ! ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľná číslica od 3
do 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'xax x1x ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľné písmeno od
'a' do 'z' alebo číslica od
1 do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľné písmeno od
'a' do 'z' alebo písmeno od
'A' do 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! x5x x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x ľubovoľné písmeno od
'a' do 'z' alebo číslice 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! ! x3x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: medzi x písmená od 'a'
do 'z' v množstve od 1 a
viac:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Výsledok vykonania kódu:
'xx ! ! ! x123x xa3x'
Príklad
Urobme to tak, aby počet písmen mohol byť aj nula:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Výsledkom bude:
'! ! ! ! x123x xa3x'
Príklad
Vnútri hranatých zátvoriek je možné uvádzať aj escapované znaky. Nájdime postupnosť písmen a číslic, opakujúcu sa nula alebo viackrát:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Výsledok vykonania kódu:
'! x@x ! ! !'
Príklad
Ak potrebujeme uviesť ďalšie hranaté zátvorky, tak ich tiež musíme escapovať:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! x3x'
Praktické úlohy
Daný reťazec:
txt = 'aba aea aca aza axa'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - písmeno 'b',
'e' alebo 'x'.
Daný reťazec:
txt = 'a1a a3a a7a a9a aba'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - číslica od
3 do 6.
Daný reťazec:
txt = 'aba aea afa aha aga'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - písmeno od
'a' do 'g'.
Daný reťazec:
txt = 'aba aea afa aha aga'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - písmeno od
'a' do 'f' a od 'j'
do 'z'.
Daný reťazec:
txt = 'aAa aea aEa aJa a3a'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - písmeno od
'a' do 'f' a od 'A'
do 'D'.
Daný reťazec:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - malé
latinské písmená, bez ovplyvnenia ostatných.
Daný reťazec:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - malé a
veľké latinské písmená, bez ovplyvnenia
ostatných.
Daný reťazec:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napíšte regulárny výraz, ktorý nájde podľa
nasledovného vzoru: na okrajoch stoja písmená
'a', a medzi nimi - malé
latinské písmená a číslice, bez ovplyvnenia
ostatných.