Wielowierszowość w wyrażeniach regularnych Pythona
Wyrażenia regularne przy pracy z wielowierszowymi ciągami znaków mają swoje szczególne cechy. Przyjrzyjmy się im na przykładzie następującego ciągu, zawierającego zwykłe znaki, znaki znaki nowej linii oraz tabulacji:
txt = '''111
222
333
444'''
Znak nowej linii
Znaki nowej linii można złapać za
pomocą polecenia '\n':
res = re.sub('\n', '!', txt)
print(res)
W rezultacie wyświetli się następujący ciąg (przerwy między wierszami - to tabulacja):
'111! 222! 333! 444'
Tabulacja
Znaki tabulacji można złapać za pomocą
polecenia '\t':
res = re.sub('\t', '!', txt)
print(res)
Wynik wykonania kodu:
'''
!111
!222
!333
!444
'''
Działanie kropki
Polecenie '.' dla wielowierszowego ciągu
nie łapie znaków nowej linii:
res = re.sub('.', '!', txt)
print(res)
Wynik wykonania kodu:
'''
!!!
!!!!
!!!!
!!!!
'''
Dowolny znak
Aby złapać wszystkie znaki w wielowierszowym
ciągu, używa się sprytnej sztuczki w postaci
kombinacji [\s\S]. Taka konstrukcja
znajdzie wszystkie zwykłe znaki i wszystkie znaki nowej
linii:
res = re.sub('[\s\S]', '!', txt)
print(res)
Wynik wykonania kodu:
'!!!!!!!!!!!!!!!!!!'
Dolar
Polecenie '$' w trybie wielowierszowym
będzie łapać koniec każdego wiersza:
res = re.sub('$', '!', txt)
print(res)
Wynik wykonania kodu:
'''
111!
222!
333!
444!
'''
Zadania praktyczne
Dany jest ciąg:
'''
abc
def
ghi
jkl
'''
Napisz wyrażenie regularne, które przekształci ten ciąg w następujący:
'''
abc!
def!
ghi!
jkl!
'''
Dany jest ciąg:
'''
abc
def
ghi
jkl
'''
Napisz wyrażenie regularne, które przekształci ten ciąg w następujący:
'''
! abc
! def
! ghi
! jkl
'''
Dany jest ciąg:
'''
abc
def
ghi
jkl
'''
Napisz wyrażenie regularne, które przekształci ten ciąg w następujący:
'''!
abc
def
ghi
jkl
!'''
Dany jest ciąg:
'''
abc
def
ghi
jkl
'''
Napisz wyrażenie regularne, które przekształci ten ciąg w następujący:
'''!
! abc
! def
! ghi
! jkl
!'''
Dany jest ciąg:
'''
abc
def
ghi
jkl
'''
Napisz wyrażenie regularne, które przekształci ten ciąg w następujący:
'''!
abc!
def!
ghi!
jkl!
!'''
Dany jest ciąg:
'''
abc
def
ghi
jkl
'''
Napisz wyrażenie regularne, które przekształci ten ciąg w następujący:
'''
!abc
!def
!ghi
!jkl
'''