Víceřádkovost v regulárních výrazech Pythonu
Regulární výrazy při práci s víceřádkovými řetězci mají své zvláštnosti. Pojďme se s nimi seznámit na příkladu následujícího řetězce, obsahujícího běžné znaky, znaky nového řádku a tabulátory:
txt = '''111
222
333
444'''
Nový řádek
Znaky nového řádku lze zachytit
pomocí příkazu '\n':
res = re.sub('\n', '!', txt)
print(res)
Výsledkem bude následující řetězec (mezery mezi řádky jsou tabulátory):
'111! 222! 333! 444'
Tabulátor
Znaky tabulátoru lze zachytit pomocí
příkazu '\t':
res = re.sub('\t', '!', txt)
print(res)
Výsledek provedení kódu:
'''
!111
!222
!333
!444
'''
Funkce tečky
Příkaz '.' pro víceřádkový řetězec
nezachytává znaky nového řádku:
res = re.sub('.', '!', txt)
print(res)
Výsledek provedení kódu:
'''
!!!
!!!!
!!!!
!!!!
'''
Libovolný znak
Pro zachycení všech znaků ve víceřádkovém
řetězci se používá chytrý trik ve formě
kombinace [\s\S]. Tato konstrukce
najde všechny běžné znaky i všechny znaky
nového řádku:
res = re.sub('[\s\S]', '!', txt)
print(res)
Výsledek provedení kódu:
'!!!!!!!!!!!!!!!!!!'
Dolar
Příkaz '
v víceřádkovém režimu
bude zachytávat konec každého řádku:
res = re.sub('
, '!', txt)
print(res)
Výsledek provedení kódu:
'''
111!
222!
333!
444!
'''
Praktické úlohy
Daný řetězec:
'''
abc
def
ghi
jkl
'''
Napište regulární výraz, který z tohoto řetězce vytvoří následující:
'''
abc!
def!
ghi!
jkl!
'''
Daný řetězec:
'''
abc
def
ghi
jkl
'''
Napište regulární výraz, který z tohoto řetězce vytvoří následující:
'''
! abc
! def
! ghi
! jkl
'''
Daný řetězec:
'''
abc
def
ghi
jkl
'''
Napište regulární výraz, který z tohoto řetězce vytvoří následující:
'''!
abc
def
ghi
jkl
!'''
Daný řetězec:
'''
abc
def
ghi
jkl
'''
Napište regulární výraz, který z tohoto řetězce vytvoří následující:
'''!
! abc
! def
! ghi
! jkl
!'''
Daný řetězec:
'''
abc
def
ghi
jkl
'''
Napište regulární výraz, který z tohoto řetězce vytvoří následující:
'''!
abc!
def!
ghi!
jkl!
!'''
Daný řetězec:
'''
abc
def
ghi
jkl
'''
Napište regulární výraz, který z tohoto řetězce vytvoří následující:
'''
!abc
!def
!ghi
!jkl
'''