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:

pythonflags=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:

pythontxt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)

print(res)

Wynik wykonania kodu:

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

pythontxt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)

print(res)

Wynik wykonania kodu:

python'! ! ! !'

Przykład

Znajdźmy za pomocą wyrażenia regularnego wszystkie znaki nowej linii:

pythontxt = '''aaa
  bbb'''
res = re.sub('\n', '!', txt)

print(res)

Wynik wykonanego kodu:

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

pythontxt = '''aaa
  bbb'''
res = re.sub('.', '!', txt)

print(res)

Wynik wykonanego kodu:

python'!!!
!!!'

Przykład

Aby poprawić ten błąd, należy zastosować flagę re.DOTALL:

pythonres = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)

Wynik wykonanego kodu:

python'!!!!!!!'

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:

pythontxt = '''
  aaa
  AAA
  aaa'''
res = re.sub('aaa
, '!', txt)

print(res)

Wynik wykonanego kodu:

python'''
  aaa
  AAA
  !
'''

Przykład

Teraz ustawmy flagę re.M:

pythonres = re.sub('aaa
, '!', txt, flags=re.M)
print(res)

Wynik wykonanego kodu:

python'''
  !
  AAA
  !
'''

Przykład

Zastosujmy teraz jeszcze flagę do ignorowania wielkości liter:

pythonres = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)

Wynik wykonanego kodu:

python'''
  !
  !
  !
'''