Sady znaků v regulárních výrazech Python
Skupiny znaků \d a \w nejsou
příliš flexibilní. Dokonce i tak jednoduchý úkol,
jako najít všechna písmena, ale ne číslice -
nemůže být jimi vyřešen. Pro takové úkoly
by se měly použít hranaté závorky,
představující operaci 'nebo'.
Hranaté závorky nahrazují jeden
znak, libovolný z těch uvnitř.
Například takto: x[abc]x -
říkáme, že na okrajích musí být písmena
x, a uvnitř - jeden znak: nebo 'a',
nebo 'b', nebo 'c'.
Za hranatými závorkami lze psát
operátory opakování. Například takto:
x[abc]+x - říkáme, že uvnitř
x může být libovolný počet znaků
'a', 'b' a 'c' -
v libovolných kombinacích.
Lze nejen vypisovat znaky, ale
i vytvářet skupiny znaků zápisem mezi
dvěma znaky pomlčku. Například takto:
[a-d] - získáme všechny znaky od
'a' do 'd'.
Podívejme se na příklady.
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolné písmeno od
'a' do 'z':
Výsledek provedení kódu:
'! ! ! x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolné písmeno od
'a' do 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! xmx x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolné písmeno od
'A' do 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Výsledek provedení kódu:
'xax ! xcx x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolná číslice od 0
do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Výsledek provedení kódu:
'xax ! ! ! x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolná číslice od 3
do 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Výsledek provedení kódu:
'xax x1x ! ! x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolné písmeno od
'a' do 'z' nebo číslice od
1 do 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! ! x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolné písmeno od
'a' do 'z' nebo 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ýsledek provedení kódu:
'! ! ! x5x x@x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x libovolné písmeno od
'a' do 'z' nebo číslice 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! ! x3x'
Příklad
V tomto příkladu vypadá vzor hledání
takto: mezi x písmena od 'a'
do 'z' v množství od 1 a
více:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Výsledek provedení kódu:
'xx ! ! ! x123x xa3x'
Příklad
Udělejme to, aby počet písmen mohl být i nula:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Ve výsledku dostaneme:
'! ! ! ! x123x xa3x'
Příklad
Uvnitř hranatých závorek lze také uvádět escapované znaky. Najděme posloupnost písmen a číslic, opakující se nula nebo vícekrát:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Výsledek provedení kódu:
'! x@x ! ! !'
Příklad
Pokud potřebujeme uvést ještě jedny hranaté závorky, tak je také musíme escapovat:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! x3x'
Praktické úlohy
Je dán řetězec:
txt = 'aba aea aca aza axa'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - písmeno 'b',
'e' nebo 'x'.
Je dán řetězec:
txt = 'a1a a3a a7a a9a aba'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - číslice od
3 do 6.
Je dán řetězec:
txt = 'aba aea afa aha aga'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - písmeno od
'a' do 'g'.
Je dán řetězec:
txt = 'aba aea afa aha aga'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - písmeno od
'a' do 'f' a od 'j'
do 'z'.
Je dán řetězec:
txt = 'aAa aea aEa aJa a3a'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - písmeno od
'a' do 'f' a od 'A'
do 'D'.
Je dán řetězec:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - malá
latinská písmena, bez zásahu ostatních.
Je dán řetězec:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - malá a
velká latinská písmena, bez zásahu
ostatních.
Je dán řetězec:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Napište regulární výraz, který najde podle
následujícího vzoru: na okrajích stojí písmena
'a', a mezi nimi - malá
latinská písmena a číslice, bez zásahu
ostatních.