Pomlčka uvnitř množin v regulárních výrazech Pythonu
Pomlčka - je také speciální znak uvnitř [ ]
(ale venku - ne). Pokud potřebujete samotnou
pomlčku jako znak - umístěte ji tam,
kde nebude pochopená jako oddělovač
skupiny.
Proč je to důležité: můžete vytvořit skupinu
znaků, aniž byste si toho všimli. Například,
takto - '[:-@]' - si myslíte, že
vybíráte dvojtečku, pomlčku a zavináč, ale ve
skutečnosti vznikne skupina znaků mezi
: a @. Do této skupiny patří
následující znaky: ? < = > :
Odkud se vzaly? Z tabulky ASCII - dvojtečka má menší číslo než zavináč - a vznikne skupina. To znamená, že všechny skupiny jsou vytvořeny podle tabulky ASCII (pokud chcete, můžete toho využívat).
Jak s tím bojovat: umístěte znak
pomlčky tam, kde rozhodně nebude pochopen
jako znak skupiny, například na začátku nebo
na konci (tedy za [ nebo před
]).
Pomlčku lze také escapovat - pak
bude označovat sama sebe bez ohledu
na pozici. Například místo [:-@]
napsat [:\-@] - a skupina již
nebude, ale budou tři znaky - dvojtečka,
pomlčka a zavináč @.
Příklad
V následujícím příkladu je vzor hledání tento:
číslice 1, poté písmeno od 'a'
do 'z', poté číslice 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Výsledek provedení kódu:
'! 1-2 ! !'
Příklad
Nyní pojďme escapovat pomlčku. Ve
výsledku je vzor hledání tento: číslice
1, poté písmeno 'a', nebo
pomlčka, nebo písmeno 'z', poté číslice
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! 1c2 !'
Příklad
Lze jednoduše přemístit pomlčku, aniž byste ji escapovali:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! 1c2 !'
Příklad
V následujícím příkladu je vzor hledání tento:
první znak - to jsou malá písmena nebo
pomlčka '-', pak dvě písmena
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Výsledek provedení kódu:
'! Axx ! @xx'
Příklad
V následujícím příkladu je vzor hledání tento:
první znak - to jsou malá, velká
písmena nebo pomlčka '-', pak dvě písmena
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! @xx'
Příklad
Pomlčku lze umístit mezi dvě skupiny - tam rozhodně ještě nevytvoří další skupinu:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! @xx'
Praktické úlohy
Je dán řetězec:
txt = 'xaz xBz xcz x-z x@z'
Najděte všechny řetězce podle následujícího vzoru:
písmeno 'x', velké nebo malé
písmeno nebo pomlčka, písmeno 'z'.
Je dán řetězec:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Najděte všechny řetězce podle následujícího vzoru:
písmeno 'x', poté nebo dolar, nebo
pomlčka nebo plus, pak písmeno 'z'.