Flagi dla ciągów wyrażeń regularnych w Pythonie
Aby ustawić flagi jako jeden z opcjonalnych parametrów dla metod pracujących z wyrażeniami regularnymi, używa się następującej składni:
flags=re.nazwa_flagi
Główne flagi do pracy z wyrażeniami regularnymi
| Flaga | Przeznaczenie |
|---|---|
re.IGNORECASE |
Ignorowanie wielkości liter. |
re.DOTALL |
Kropka oznacza dowolny znak, włączając w to znak nowej linii. |
re.I |
Sprawia, że wyszukiwanie jest niewrażliwe na wielkość liter. |
re.L |
Wyszukuje słowa zgodnie z bieżącym językiem.
Ta interpretacja dotyczy grupy alfabetycznej
(\w i \W), a także
zachowania granicy słowa (\b i
\B).
|
re.M |
Znak $ wykonuje wyszukiwanie na końcu
każdej linii tekstu (nie tylko na końcu tekstu)
a znak ^ wykonuje wyszukiwanie na początku
każdej linii tekstu (nie tylko na początku
tekstu).
|
re.S |
Zmienia znaczenie kropki (.) na
dopasowanie do dowolnego znaku, włączając nową
linię.
|
re.U |
Interpretuje litery zgodnie z
zestawem znaków Unicode. Flaga ta wpływa
na zachowanie \w, \W, \b,
\B. W Pythonie 3+ flaga ta
jest ustawiona domyślnie.
|
re.X |
Pozwala na wieloliniową składnię wyrażenia
regularnego. Ignoruje spacje wewnątrz
wzorca (z wyjątkiem spacji wewnątrz
zbioru [] lub gdy są poprzedzone
backslashem) i traktuje nie
poprzedzony backslashem '#' jako komentarz.
|
Przykład
Za pomocą flagi re.IGNORECASE można
ignorować wielkość liter. Spójrzmy,
jak to się robi. W tym przykładzie
wyrażenie regularne znajdzie tylko małe litery:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Wynik wykonania kodu:
'! ! CCC DDD'
Przykład
A teraz dodajmy w czwartym parametrze
metody flagę re.IGNORECASE i wyrażenie regularne
zacznie szukać znaków we wszystkich wielkościach liter:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Wynik wykonania kodu:
'! ! ! !'
Przykład
Znajdźmy za pomocą wyrażenia regularnego wszystkie znaki nowej linii:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Wynik wykonanego kodu:
'aaa!bbb'
Przykład
Ale, jeśli trzeba zastąpić wszystkie znaki, to ustawiając w wyrażeniu regularnym kropkę, nie zostaną przechwycone znaki nowej linii:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Wynik wykonanego kodu:
'!!!
!!!'
Przykład
Aby poprawić ten błąd, należy
zastosować flagę re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Wynik wykonanego kodu:
'!!!!!!!'
Przykład
W parametrze można przekazać także kilka
flag, stawiając między nimi operator +.
Najpierw zamieńmy literę 'a'
na końcu linii:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Wynik wykonanego kodu:
'''
aaa
AAA
!
'''
Przykład
Teraz ustawmy flagę re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Wynik wykonanego kodu:
'''
!
AAA
!
'''
Przykład
Zastosujmy teraz jeszcze flagę do ignorowania wielkości liter:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Wynik wykonanego kodu:
'''
!
!
!
'''