Opérateurs de répétition de caractères dans les regex
Il arrive que l'on doive indiquer qu'un
caractère se répète un certain nombre de
fois. Si le nombre exact de répétitions est inconnu,
on peut simplement l'écrire plusieurs fois
- 'aaaa'. Mais que faire si l'on doit
dire quelque chose comme : répéter une fois ou plus ?
Pour cela, il existe des opérateurs (quantificateurs)
de répétition : le plus + (une fois ou plus),
l'astérisque * (zéro fois ou plus)
et le point d'interrogation ? (zéro ou une fois).
Ces opérateurs agissent sur le caractère
qui les précède.
Examinons le fonctionnement de ces opérateurs à l'aide d'exemples.
Exemple
Trouvons toutes les sous-chaînes selon le motif lettre
'x', lettre 'a' une ou plusieurs
fois, lettre 'x' :
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa+x', '!', txt)
print(res)
Résultat de l'exécution du code :
'xx ! ! ! xbx'
Exemple
Trouvons toutes les sous-chaînes selon le motif lettre
'x', lettre 'a' zéro ou plusieurs
fois, lettre 'x' :
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa*x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! ! xbx'
Exemple
Trouvons toutes les sous-chaînes selon le motif lettre
'x', lettre 'a' zéro ou une
fois, lettre 'x' :
txt = 'xx xax xaax xbx'
res = re.sub('xa?x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! xaax xbx'
Problèmes pratiques
Soit la chaîne :
txt = 'aa aba abba abbba abca abea'
Écrivez une expression régulière qui trouvera les chaînes
'aba', 'abba', 'abbba'
selon le motif : lettre 'a', lettre
'b' n'importe quel nombre de fois, lettre
'a'.
Soit la chaîne :
txt = 'aa aba abba abbba abca abea'
Écrivez une expression régulière qui trouvera les chaînes
'aa', 'aba', 'abba',
'abbba' selon le motif : lettre
'a', lettre 'b' n'importe quel nombre de fois
(y compris zéro fois), lettre
'a'.
Soit la chaîne :
txt = 'aa aba abba abbba abca abea'
Écrivez une expression régulière qui trouvera les chaînes
'aa', 'aba' selon le motif :
lettre 'a', lettre 'b' une
fois ou zéro, lettre 'a'.
Soit la chaîne :
txt = 'aa aba abba abbba abca abea'
Écrivez une expression régulière qui trouvera les chaînes
'aa', 'aba', 'abba',
'abbba', sans capturer 'abca'
et 'abea'.