Steaguri pentru expresii regulate în Python
Pentru a seta steagurile ca unul dintre parametrii opționali pentru metodele care lucrează cu expresii regulate, se utilizează următoarea sintaxă:
flags=re.nume steag
Steaguri principale pentru lucrul cu expresii regulate
| Steag | Scop |
|---|---|
re.IGNORECASE |
Ignoră majusculele și minusculele. |
re.DOTALL |
Punctul reprezintă orice caracter, inclusiv saltul de linie. |
re.I |
Face căutarea insensibilă la majuscule și minuscule. |
re.L |
Caută cuvinte în conformitate cu limba curentă.
Această interpretare afectează grupul alfabetic
(\w și \W), precum și
comportamentul limitei cuvântului (\b și
\B).
|
re.M |
Caracterul $ efectuează căutarea la sfârșitul
oricărei linii de text (nu doar la sfârșitul textului)
și caracterul ^ efectuează căutarea la începutul
oricărei linii de text (nu doar la începutul
textului).
|
re.S |
Schimbă semnificația punctului (.) în
potrivire cu orice caracter, inclusiv cu un nou
salt de linie.
|
re.U |
Interpretează literele în conformitate cu
setul de caractere Unicode. Acest steag afectează
comportamentul \w, \W, \b,
\B. În Python 3+ acest steag
este setat implicit.
|
re.X |
Permite sintaxă multi-linie pentru expresia
regulară. Ignoră spațiile din interiorul
modelului (cu excepția spațiilor din interiorul
setului [] sau atunci când sunt escape-uite
cu backslash) și tratează
ne-escape-uit '#' ca un comentariu.
|
Exemplu
Cu ajutorul steagului re.IGNORECASE se poate
ignora majusculele și minusculele. Să
vedem cum se face acest lucru. În acest exemplu
expresia regulară va găsi doar literele mici:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Rezultatul executării codului:
'! ! CCC DDD'
Exemplu
Și acum să adăugăm în al patrulea parametru
al metodei steagul re.IGNORECASE și expresia regulară
va începe să caute caracterele în toate tiparele de majuscule și minuscule:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Rezultatul executării codului:
'! ! ! !'
Exemplu
Să găsim cu expresia regulară toate săriturile de linie:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Rezultatul codului executat:
'aaa!bbb'
Exemplu
Dar, dacă trebuie înlocuite toate caracterele, atunci punând în expresia regulară un punct, nu vor fi prinse săriturile de linie:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Rezultatul codului executat:
'!!!
!!!'
Exemplu
Pentru a corecta această eroare, trebuie
aplicat steagul re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Rezultatul codului executat:
'!!!!!!!'
Exemplu
În parametru pot fi transmise și mai multe
steaguri, punând între ele operatorul +.
Să înlocuim mai întâi litera 'a'
de la sfârșitul liniei:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Rezultatul codului executat:
'''
aaa
AAA
!
'''
Exemplu
Acum să setăm steagul re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Rezultatul codului executat:
'''
!
AAA
!
'''
Exemplu
Să aplicăm acum și steagul pentru ignorarea majusculelor și minusculelor:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Rezultatul codului executat:
'''
!
!
!
'''