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':

pythontxt = 'aaa bbb abb'
res = re.sub('a{3}|b{3}', '!', txt)

print(res)

Výsledek provedení kódu:

python'! ! 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':

pythontxt = 'aaa bbb bbbb bbbbb axx'
res = re.sub('a{3}|b+', '!', txt)

print(res)

Výsledek provedení kódu:

python'! ! ! ! axx'

Příklad

V tomto příkladu je vzor hledání následující: jedno nebo více písmen nebo tři číslice:

pythontxt = 'a ab abc 1 12 123'
res = re.sub('[a-z]+|\d{3}', '!', txt)

print(res)

Výsledek provedení kódu:

python'! ! ! 1 12 !'

Příklad

Svislá čára může rozdělit regulární výraz ne na dvě části, ale na libovolný počet částí:

pythontxt = 'aaa bbb ccc ddd'
res = re.sub('a+|b+|c+', '!', txt)

print(res)

Výsledek provedení kódu:

python'! ! ! 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':

pythontxt = 'axx bxx bbxx exx'
res = re.sub('(a|b+)xx', '!', txt)

print(res)

Výsledek provedení kódu:

python'! ! ! exx'

Praktické úlohy

Задание 1

Daný řetězec:

pythontxt = '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.

Задание 2

Daný řetězec:

pythontxt = '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.