Příznaky pro řetězce regulárních výrazů v Pythonu
Chcete-li nastavit příznaky jako jeden z volitelných parametrů pro metody pracující s regulárními výrazy, používá se následující syntaxe:
flags=re.číslo příznaku
Základní příznaky pro práci s regulárními výrazy
| Příznak | Účel |
|---|---|
re.IGNORECASE |
Ignorování velikosti písmen. |
re.DOTALL |
Tečka označuje jakýkoli znak, včetně zalomení řádku. |
re.I |
Způsobí, že vyhledávání není citlivé na velikost písmen. |
re.L |
Hledá slova podle aktuálního jazyka.
Tato interpretace ovlivňuje abecední
skupinu (\w a \W) a také
chování hranice slova (\b a
\B).
|
re.M |
Znak $ provádí vyhledávání na konci
jakéhokoli řádku textu (ne pouze konce textu)
a znak ^ provádí vyhledávání na začátku
jakéhokoli řádku textu (ne pouze na začátku
textu).
|
re.S |
Mění hodnotu tečky (.) na
shodu s jakýmkoli znakem, včetně nového
řádku.
|
re.U |
Interpretuje písmena podle
sady znaků Unicode. Tento příznak ovlivňuje
chování \w, \W, \b,
\B. V Pythonu 3+ je tento příznak
nastaven ve výchozím stavu.
|
re.X |
Umožňuje víceřádkovou syntaxi regulárního
výrazu. Ignoruje mezery uvnitř
vzoru (s výjimkou mezer uvnitř
množiny [] nebo při escapování
zpětným lomítkem) a zachází s ne
escapovaným '#' jako s komentářem.
|
Příklad
Pomocí příznaku re.IGNORECASE lze
ignorovat velikost písmen. Podívejme se,
jak se to dělá. V tomto příkladu
regulární výraz najde pouze malá písmena:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Výsledek provedení kódu:
'! ! CCC DDD'
Příklad
A nyní přidáme do čtvrtého parametru
metody příznak re.IGNORECASE a regulární výraz
začne hledat znaky ve všech velikostech písmen:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Výsledek provedení kódu:
'! ! ! !'
Příklad
Pojďme najít regulárním výrazem všechna zalomení řádku:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Výsledek provedeného kódu:
'aaa!bbb'
Příklad
Ale pokud potřebujete nahradit všechny znaky, tak při použití tečky v regulárním výrazu se nechytí zalomení řádku:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Výsledek provedeného kódu:
'!!!
!!!'
Příklad
Chcete-li tuto chybu opravit, je třeba
použít příznak re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Výsledek provedeného kódu:
'!!!!!!!'
Příklad
V parametru lze předat i několik
příznaků, pomocí operátoru +.
Nejprve nahradíme písmeno 'a'
na konci řádku:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Výsledek provedeného kódu:
'''
aaa
AAA
!
'''
Příklad
Nyní nastavíme příznak re.M:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Výsledek provedeného kódu:
'''
!
AAA
!
'''
Příklad
Nyní použijme ještě příznak pro ignorování velikosti písmen:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Výsledek provedeného kódu:
'''
!
!
!
'''