Ensembles de caractères dans les expressions régulières Python
Les groupes de caractères \d et \w ne sont
pas très flexibles. Même une tâche aussi simple
que trouver toutes les lettres, mais pas les chiffres -
ne peut pas être résolue par eux. Pour de telles tâches,
il faut utiliser des crochets,
représentant une opération 'ou'.
Les crochets remplacent un
caractère, n'importe lequel de ceux listés à l'intérieur. Par
exemple, comme ceci : x[abc]x - nous
disons que sur les bords doivent se trouver les lettres
'x', et à l'intérieur - un caractère : soit 'a',
soit 'b', soit 'c'.
Après les crochets, on peut écrire
des opérateurs de répétition. Par exemple, comme ceci :
x[abc]+x - nous disons qu'à l'intérieur
des 'x', il peut y avoir n'importe quel nombre de caractères
'a', 'b' et 'c' - dans
n'importe quelles combinaisons.
On peut non seulement énumérer les caractères, mais
aussi créer des groupes de caractères, en écrivant un
tiret entre deux caractères. Par exemple, comme ceci :
[a-d] - nous obtenons tous les caractères de
'a' à 'd'.
Regardons des exemples.
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quelle lettre de
'a' à 'z' :
Résultat de l'exécution du code :
'! ! ! x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quelle lettre de
'a' à 'k' :
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! xmx x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quelle lettre de
'A' à 'Z' :
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'xax ! xcx x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quel chiffre de 0
à 9 :
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'xax ! ! ! x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quel chiffre de 3
à 7 :
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'xax x1x ! ! x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quelle lettre de
'a' à 'z' ou un chiffre de
1 à 9 :
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! ! x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quelle lettre de
'a' à 'z' ou une lettre de
'A' à 'Z' :
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! x5x x@x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', n'importe quelle lettre de
'a' à 'z' ou les chiffres 1,
2 :
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! ! x3x'
Exemple
Dans cet exemple, le modèle de recherche est
le suivant : entre les 'x', des lettres de 'a'
à 'z' en quantité de 1 et
plus :
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Résultat de l'exécution du code :
'xx ! ! ! x123x xa3x'
Exemple
Faisons en sorte que le nombre de lettres puisse être zéro :
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
En résultat, nous obtiendrons :
'! ! ! ! x123x xa3x'
Exemple
À l'intérieur des crochets, on peut également spécifier des caractères échappés. Trouvons une séquence de lettres et de chiffres, répétée zéro ou plusieurs fois :
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! x@x ! ! !'
Exemple
Si nous devons spécifier d'autres crochets, nous les échappons également obligatoirement :
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Résultat de l'exécution du code :
'! ! ! x3x'
Problèmes pratiques
Soit la chaîne :
txt = 'aba aea aca aza axa'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - la lettre 'b',
'e' ou 'x'.
Soit la chaîne :
txt = 'a1a a3a a7a a9a aba'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - un chiffre de
3 à 6.
Soit la chaîne :
txt = 'aba aea afa aha aga'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - une lettre de
'a' à 'g'.
Soit la chaîne :
txt = 'aba aea afa aha aga'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - une lettre de
'a' à 'f' et de 'j'
à 'z'.
Soit la chaîne :
txt = 'aAa aea aEa aJa a3a'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - une lettre de
'a' à 'f' et de 'A'
à 'D'.
Soit la chaîne :
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - des lettres latines
minuscules, sans affecter les autres.
Soit la chaîne :
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - des lettres latines minuscules et
majuscules, sans affecter les autres.
Soit la chaîne :
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Écrivez une expression régulière qui trouvera selon
le modèle suivant : sur les bords se trouvent les lettres
'a', et entre elles - des lettres latines
minuscules et des chiffres, sans affecter les autres.