Spojovník vnútri množín v regulárnych výrazoch Python
Spojovník je tiež špeciálny znak vnútri [ ]
(no vonku - nie). Ak potrebujete samotný
spojovník ako symbol - umiestnite ho tam,
kde nebude pochopený ako oddeľovač
skupiny.
Prečo je to dôležité: môžete vytvoriť skupinu
znakov, ani o tom nevediac. Napríklad,
takto - '[:-@]' - myslíte si, že
vyberáte dvojbodku, spojovník a zavináč, no v
skutočnosti vznikne skupina znakov medzi
: a @. Do tejto skupiny patria
nasledujúce znaky: ? < = > :
Odkiaľ sa vzali? Z tabuľky ASCII - dvojbodka má menšie číslo ako zavináč - a vznikne tak skupina. To znamená, že všetky skupiny vznikajú podľa tabuľky ASCII (ak chcete, môžete to využiť).
Ako s tým bojovať: umiestnite symbol
spojovníka tam, kde určite nebude pochopený
ako symbol skupiny, napríklad na začiatku alebo
na konci (teda za [ alebo pred
]).
Spojovník môžete tiež escapovať - potom
bude označovať sám seba bez ohľadu
na pozíciu. Napríklad, namiesto [:-@]
napísať [:\-@] - a skupina už
nevznikne, budú tam tri znaky - dvojbodka,
spojovník a zavináč @.
Príklad
V nasledujúcom príklade je vyhľadávací vzor taký:
číslica 1, potom písmeno od 'a'
do 'z', potom číslica 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Výsledok vykonania kódu:
'! 1-2 ! !'
Príklad
Poďme teraz escapovať spojovník.
Výsledkom je vyhľadávací vzor taký: číslica
1, potom písmeno 'a', alebo
spojovník, alebo písmeno 'z', potom číslica
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! 1c2 !'
Príklad
Môžete jednoducho presunúť spojovník, bez escapovania ho:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! 1c2 !'
Príklad
V nasledujúcom príklade je vyhľadávací vzor taký:
prvý znak - to sú malé písmená alebo
spojovník '-', potom dve písmená
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Výsledok vykonania kódu:
'! Axx ! @xx'
Príklad
V nasledujúcom príklade je vyhľadávací vzor taký:
prvý znak - to sú malé, veľké
písmená alebo spojovník '-', potom dve písmená
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! @xx'
Príklad
Môžete umiestniť spojovník medzi dve skupiny - tam určite ešte nevytvorí ďalšiu skupinu:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Výsledok vykonania kódu:
'! ! ! @xx'
Praktické úlohy
Daný reťazec:
txt = 'xaz xBz xcz x-z x@z'
Nájdite všetky reťazce podľa nasledujúceho vzoru:
písmeno 'x', veľké alebo malé
písmeno alebo spojovník, písmeno 'z'.
Daný reťazec:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Nájdite všetky reťazce podľa nasledujúceho vzoru:
písmeno 'x', potom alebo dolár, alebo
spojovník alebo plus, potom písmeno 'z'.