Groupes de caractères dans les expressions régulières Python
Il existe des commandes spéciales qui
permettent de sélectionner directement des groupes entiers
de caractères. La commande \d signifie un chiffre
de 0 à 9. La commande \w
désigne un chiffre, une lettre latine ou le signe
de soulignement. La commande \s désigne
un espace ou un caractère d'espacement : espace,
saut de ligne, tabulation. Il est possible d'inverser
la signification de la commande en écrivant une lettre majuscule :
par exemple, si \d est un chiffre, alors
\D est un non-chiffre.
Exemple
Trouvons tous les chiffres :
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Résultat de l'exécution du code :
'! !! !!!'
Exemple
Les opérateurs de répétition considèrent les commandes de groupe
comme un tout, c'est-à-dire que les parenthèses de regroupement
ne sont pas nécessaires. Dans l'exemple suivant, le motif de recherche
est le suivant : chiffre de 0 à
9 une ou plusieurs fois :
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! abc @@@'
Exemple
Dans l'exemple suivant, le motif de recherche est
le suivant : n'importe quoi une ou plusieurs fois,
mais pas un chiffre de 0 à 9 :
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Résultat de l'exécution du code :
'123!3!'
Exemple
Dans cet exemple, le motif de recherche est le suivant : caractère d'espacement une fois :
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Résultat de l'exécution du code :
'1!12!123!abc!@@@'
Exemple
Dans cet exemple, le motif de recherche est
le suivant : caractère NON espacement une ou plusieurs
fois. Toutes les sous-chaînes, séparées par
des espaces, seront remplacées par '!' :
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! ! !'
Exemple
Dans cet exemple, le motif de recherche est
le suivant : chiffre ou lettre une ou plusieurs
fois. Toutes les sous-chaînes, constituées de chiffres
et de lettres, seront remplacées par '!' :
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! ! @@@'
Exemple
Dans cet exemple, le motif de recherche est
le suivant : NON chiffre et NON lettre une ou plusieurs
fois. Dans notre cas, cela correspond
à '@@@' et à tous les espaces
(ce ne sont en effet ni des chiffres ni des lettres).
Remarquez qu'à la fin il y a un
'!' - il correspond à la chaîne
' @@@' - avec un espace devant :
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Résultat de l'exécution du code :
'1!12!123!Abc!'
Tâches pratiques
Soit la chaîne :
txt = 'a1a a2a a3a a4a a5a aba aca'
Écrivez une expression régulière qui trouvera les chaînes
dans lesquelles les lettres 'a' sont sur les bords,
et entre elles se trouve un chiffre.
Soit la chaîne :
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Écrivez une expression régulière qui trouvera les chaînes
dans lesquelles les lettres 'a' sont sur les bords,
et entre elles se trouve n'importe quel nombre de chiffres.
Soit la chaîne :
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Écrivez une expression régulière qui trouvera les chaînes
dans lesquelles les lettres 'a' sont sur les bords,
et entre elles se trouve n'importe quel nombre de chiffres (y
compris zéro chiffre, c'est-à-dire la chaîne
'aa').
Soit la chaîne :
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Écrivez une expression régulière qui trouvera les chaînes
du type suivant : sur les bords se trouvent les lettres
'a' et 'b', et entre elles -
ni un chiffre ni un espace.
Soit la chaîne :
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Écrivez une expression régulière qui trouvera les chaînes
du type suivant : sur les bords se trouvent les lettres
'a' et 'b', et entre elles -
ni une lettre, ni un chiffre, ni un espace.
Soit la chaîne :
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Écrivez une expression régulière qui remplacera tous
les espaces par '!'.