Skupiny znaků v regulárních výrazech Python
Existují speciální příkazy, které
umožňují vybrat najednou celé skupiny
znaků. Příkaz \d znamená číslici
od 0 do 9. Příkaz \w
označuje číslici, latinské písmeno nebo znak
podtržítka. Příkaz \s označuje
mezeru nebo bílý znak: mezeru,
nový řádek, tabulátor. Hodnotu příkazu lze invertovat
zapsáním velkého písmene:
například, pokud \d - číslice, pak
\D - ne číslice.
Příklad
Pojďme najít všechny číslice:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Výsledek provedení kódu:
'! !! !!!'
Příklad
Operátory opakování považují příkazy-skupiny
za jeden celek, to znamená, že seskupující závorky
nejsou potřeba. V dalším příkladu vypadá vyhledávací vzor
takto: číslice od 0 do
9 jeden nebo více krát:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! abc @@@'
Příklad
V dalším příkladu vypadá vyhledávací vzor
takto: cokoliv jeden nebo více krát,
ale ne číslice od 0 do 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Výsledek provedení kódu:
'123!3!'
Příklad
V tomto příkladu vypadá vyhledávací vzor takto: bílý znak jedenkrát:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Výsledek provedení kódu:
'1!12!123!abc!@@@'
Příklad
V tomto příkladu vypadá vyhledávací vzor
takto: NE bílý znak jeden nebo více
krát. Všechny podřetězce, oddělené
mezerami, budou nahrazeny na '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! ! !'
Příklad
V tomto příkladu vypadá vyhledávací vzor
takto: číslice nebo písmeno jeden nebo více
krát. Všechny podřetězce, skládající se z číslic
a písmen, budou nahrazeny na '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! ! @@@'
Příklad
V tomto příkladu vypadá vyhledávací vzor
takto: NE číslice a NE písmeno jeden nebo více
krát. Pod tuto definici v našem
případě spadá '@@@' a všechny mezery
(ty přece také nejsou číslice ani písmena).
Všimněte si, že na konci je jedna
'!' - do ní se přeměnil řetězec
' @@@' - s mezerou vpředu:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Výsledek provedení kódu:
'1!12!123!Abc!'
Praktické úlohy
Daný řetězec:
txt = 'a1a a2a a3a a4a a5a aba aca'
Napište regulární výraz, který najde řetězce,
ve kterých po okrajích stojí písmena 'a',
a mezi nimi jedna číslice.
Daný řetězec:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Napište regulární výraz, který najde řetězce,
ve kterých po okrajích stojí písmena 'a',
a mezi nimi libovolný počet číslic.
Daný řetězec:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Napište regulární výraz, který najde řetězce,
ve kterých po okrajích stojí písmena 'a',
a mezi nimi libovolný počet číslic (včetně
nuly číslic, tedy řetězec
'aa').
Daný řetězec:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Napište regulární výraz, který najde řetězce
následujícího druhu: po okrajích stojí písmena
'a' a 'b', a mezi nimi -
ne číslo a ne mezera.
Daný řetězec:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Napište regulární výraz, který najde řetězce
následujícího druhu: po okrajích stojí písmena
'a' a 'b', a mezi nimi -
ne písmeno, ne číslice a ne mezera.
Daný řetězec:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Napište regulární výraz, který nahradí všechny
mezery na '!'.