Příkaz 'nebo' v regulárních výrazech Pythonu
Příkaz '|', který představuje
výkonnější variantu 'nebo'
ve srovnání s příkazem [ ]. Tento příkaz
umožňuje rozdělit regulární výraz na několik
částí. Přitom hledaný výraz může spadat
buď pod jednu část regulárního výrazu, nebo pod
druhou. Podívejme se na příkladech.
Příklad
V tomto příkladu je vzor hledání následující:
tři písmena 'a' nebo tři písmena
'b':
txt = 'aaa bbb abb'
res = re.sub('a{3}|b{3}', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! abb'
Příklad
V tomto příkladu je vzor hledání následující:
tři písmena 'a' nebo od 1 a
více písmen 'b':
txt = 'aaa bbb bbbb bbbbb axx'
res = re.sub('a{3}|b+', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! ! axx'
Příklad
V tomto příkladu je vzor hledání následující: jedno nebo více písmen nebo tři číslice:
txt = 'a ab abc 1 12 123'
res = re.sub('[a-z]+|\d{3}', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! 1 12 !'
Příklad
Svislá čára může rozdělit regulární výraz ne na dvě části, ale na libovolný počet částí:
txt = 'aaa bbb ccc ddd'
res = re.sub('a+|b+|c+', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! ddd'
Příklad
Pokud je svislá čára uvnitř kulatých
závorek, pak 'nebo' funguje pouze
uvnitř těchto závorek.
Jako příklad nalezněme řetězce podle
následujícího vzoru: na začátku je buď
'a', nebo 'b' jedno nebo více
krát, a poté dvě písmena 'x':
txt = 'axx bxx bbxx exx'
res = re.sub('(a|b+)xx', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! ! exx'
Praktické úlohy
Daný řetězec:
txt = 'aeeea aeea aea axa axxa axxxa'
Napište regulární výraz, který najde řetězce
podle vzoru: na okrajích jsou písmena
'a', a mezi nimi - buď písmeno
'e' libovolný počet krát nebo písmeno
'x' libovolný počet krát.
Daný řetězec:
txt = 'aeeea aeea aea axa axxa axxxa'
Napište regulární výraz, který najde řetězce
podle vzoru: na okrajích jsou písmena
'a', a mezi nimi - buď písmeno
'e' dvakrát nebo písmeno 'x'
libovolný počet krát.