Drapeaux pour les chaînes d'expressions régulières en Python
Pour définir les drapeaux comme l'un des paramètres facultatifs pour les méthodes travaillant avec les expressions régulières, la syntaxe suivante est utilisée :
flags=re.nom_du_drapeau
Principaux drapeaux pour travailler avec les expressions régulières
| Drapeau | Fonction |
|---|---|
re.IGNORECASE |
Ignorer la casse des caractères. |
re.DOTALL |
Le point correspond à n'importe quel caractère, y compris le saut de ligne. |
re.I |
Rend la recherche insensible à la casse. |
re.L |
Recherche les mots en fonction de la langue actuelle.
Cette interprétation affecte le groupe alphabétique
(\w et \W), ainsi que
le comportement de la frontière de mot (\b et
\B).
|
re.M |
Le caractère $ effectue la recherche à la fin
de n'importe quelle ligne de texte (pas seulement à la fin du texte)
et le caractère ^ effectue la recherche au début
de n'importe quelle ligne de texte (pas seulement au début
du texte).
|
re.S |
Modifie la signification du point (.) pour
qu'il corresponde à n'importe quel caractère, y compris une nouvelle
ligne.
|
re.U |
Interprète les lettres selon le
jeu de caractères Unicode. Ce drapeau influence
le comportement de \w, \W, \b,
\B. En Python 3+, ce drapeau
est défini par défaut.
|
re.X |
Permet une syntaxe d'expression régulière multiligne.
Il ignore les espaces à l'intérieur du
modèle (sauf les espaces à l'intérieur d'un ensemble
[] ou lorsqu'ils sont échappés par un
antislash) et traite le '#' non
échappé comme un commentaire.
|
Exemple
Avec le drapeau re.IGNORECASE, on peut
ignorer la casse des caractères. Regardons
comment cela se fait. Dans cet exemple,
l'expression régulière ne trouvera que les lettres minuscules :
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! CCC DDD'
Exemple
Maintenant, ajoutons dans le quatrième paramètre
de la méthode le drapeau re.IGNORECASE et l'expression régulière
commencera à rechercher les caractères dans toutes les casses :
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Résultat de l'exécution du code :
'! ! ! !'
Exemple
Trouvons avec l'expression régulière tous les sauts de ligne :
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Résultat du code exécuté :
'aaa!bbb'
Exemple
Mais, si nous devons remplacer absolument tous les caractères, en utilisant le point dans l'expression régulière, les sauts de ligne ne seront pas capturés :
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Résultat du code exécuté :
'!!!
!!!'
Exemple
Pour corriger cette erreur, il faut
appliquer le drapeau re.DOTALL :
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Résultat du code exécuté :
'!!!!!!!'
Exemple
Il est possible de passer plusieurs
drapeaux dans le paramètre, en plaçant l'opérateur +
entre eux. Commençons par remplacer la lettre 'a'
à la fin de la ligne :
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Résultat du code exécuté :
'''
aaa
AAA
!
'''
Exemple
Maintenant, mettons le drapeau re.M :
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Résultat du code exécuté :
'''
!
AAA
!
'''
Exemple
Appliquons maintenant également le drapeau pour ignorer la casse :
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Résultat du code exécuté :
'''
!
!
!
'''