Skupiny znakov v regulárnych výrazoch Python
Existujú špeciálne príkazy, ktoré
umožňujú vybrať naraz celé skupiny
znakov. Príkaz \d znamená číslicu
od 0 do 9. Príkaz \w
označuje číslicu, latinské písmeno alebo znak
podčiarknutia. Príkaz \s označuje
medzeru alebo biely znak: medzera,
koniec riadku, tabulátor. Môžeme invertovať
význam príkazu napísaním veľkého písmena:
napríklad, ak \d - číslica, tak
\D - nie číslica.
Príklad
Nájdime všetky číslice:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Výsledok vykonania kódu:
'! !! !!!'
Príklad
Operátory opakovania považujú príkazy-skupiny
za jeden celok, to znamená, že zoskupujúce zátvorky
nie sú potrebné. V nasledujúcom príklade vyhľadávací vzor
vyzerá takto: číslica od 0 do
9 jeden alebo viac krát:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! abc @@@'
Príklad
V nasledujúcom príklade vyhľadávací vzor vyzerá
takto: čokoľvek jeden alebo viac krát,
ale nie číslica od 0 do 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Výsledok vykonania kódu:
'123!3!'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto: biely znak jeden raz:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Výsledok vykonania kódu:
'1!12!123!abc!@@@'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: NIE biely znak jeden alebo viac
krát. Všetky podreťazce, oddelené
medzerami, sa nahradia na '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! ! !'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: číslica alebo písmeno jeden alebo viac
krát. Všetky podreťazce, pozostávajúce z číslic
a písmen, sa nahradia na '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! ! @@@'
Príklad
V tomto príklade vyhľadávací vzor vyzerá
takto: NIE číslica a NIE písmeno jeden alebo viac
krát. Pod túto definíciu v našom
prípade spadá '@@@' a všetky medzery
(sú tiež nie číslice a nie písmená).
Všimnite si, že na konci je jedna
'!' - do nej sa pretransformoval reťazec
' @@@' - s medzerou na začiatku:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Výsledok vykonania kódu:
'1!12!123!Abc!'
Praktické úlohy
Daný reťazec:
txt = 'a1a a2a a3a a4a a5a aba aca'
Napíšte regulárny výraz, ktorý nájde reťazce,
v ktorých po okrajoch stoja písmená 'a',
a medzi nimi jedna číslica.
Daný reťazec:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Napíšte regulárny výraz, ktorý nájde reťazce,
v ktorých po okrajoch stoja písmená 'a',
a medzi nimi ľubovoľný počet číslic.
Daný reťazec:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Napíšte regulárny výraz, ktorý nájde reťazce,
v ktorých po okrajoch stoja písmená 'a',
a medzi nimi ľubovoľný počet číslic (vrátane
nuly číslic, to znamená reťazec
'aa').
Daný reťazec:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Napíšte regulárny výraz, ktorý nájde reťazce
nasledujúceho druhu: po okrajoch stoja písmená
'a' a 'b', a medzi nimi -
nie číslo a nie medzera.
Daný reťazec:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Napíšte regulárny výraz, ktorý nájde reťazce
nasledujúceho druhu: po okrajoch stoja písmená
'a' a 'b', a medzi nimi -
nie písmeno, nie číslica a nie medzera.
Daný reťazec:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Napíšte regulárny výraz, ktorý nahradí všetky
medzery na '!'.