⊗pyPmREESCh 36 of 129 menu

Échappement des caractères spéciaux dans les regex Python

Supposons que vous ayez besoin qu'un caractère spécial représente lui-même. Pour cela, il faut l'échapper avec un backslash (barre oblique inverse). Regardons des exemples.

Exemple

Dans l'exemple suivant, l'auteur de l'expression régulière voulait que le motif de recherche soit : lettre 'a', puis un plus '+', puis lettre 'x'. Cependant, l'auteur du code n'a pas échappé le symbole '+' et donc le motif de recherche est en réalité : lettre 'a' une ou plusieurs fois, puis lettre 'x' :

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Résultat de l'exécution du code :

'a+x ! ! !'

Exemple

Maintenant, l'auteur a échappé le plus avec un backslash. Le motif de recherche est maintenant correct : lettre 'a', puis un plus '+', puis lettre 'x' :

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Résultat de l'exécution du code :

'! ax aax aaax'

Exemple

Dans cet exemple, le motif est : lettre 'a', puis un point '.', puis lettre 'x' :

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Résultat de l'exécution du code :

'! abx azx'

Exemple

Dans l'exemple suivant, l'auteur a oublié d'échapper le point et toutes les sous-chaînes ont été capturées, car un point non échappé représente n'importe quel caractère :

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Résultat de l'exécution du code :

'! ! !'

Remarque

Notez que si vous oubliez le backslash pour le point (lorsqu'il doit représenter lui-même) - cela peut passer inaperçu :

res = re.sub('a.x', '!', 'a.x') print(res) # retourne '!', comme nous le voulions

Visuellement, cela fonctionne correctement (car le point représente n'importe quel caractère, y compris un point normal '.'). Mais si on change la chaîne dans laquelle les remplacements ont lieu - nous verrons notre erreur :

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # retourne '! ! !', mais on attendait '! abx azx'

Liste des caractères spéciaux et ordinaires

Si vous échappez un caractère ordinaire - rien de grave ne se produit - il représentera toujours lui-même. Exception : les chiffres, ils ne peuvent pas être échappés.

On doute souvent si un symbole donné est spécial. Certains en viennent à échapper tous les symboles suspects les uns après les autres. Cependant, c'est une mauvaise pratique (cela encombre l'expression régulière de backslashes).

Les caractères spéciaux sont : $ ^ . * + ? \ / {} [] () |

Ne sont pas des caractères spéciaux : @ : , ' " - _ = < > % # ~ `& !

Tâches pratiques

Soit la chaîne :

txt = 'a.a aba aea'

Écrivez une expression régulière qui trouvera la chaîne 'a.a', sans capturer les autres.

Soit la chaîne :

txt = '2+3 223 2223'

Écrivez une expression régulière qui trouvera la chaîne '2+3', sans capturer les autres.

Soit la chaîne :

txt = '23 2+3 2++3 2+++3 345 567'

Écrivez une expression régulière qui trouvera les chaînes '2+3', '2++3', '2+++3', sans capturer les autres (+ peut être n'importe quel nombre).

Soit la chaîne :

txt = '23 2+3 2++3 2+++3 445 677'

Écrivez une expression régulière qui trouvera les chaînes '23', '2+3', '2++3', '2+++3', sans capturer les autres.

Soit la chaîne :

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Écrivez une expression régulière qui trouvera les chaînes '*q+', '*qq+', '*qqq+', sans capturer les autres.

Soit la chaîne :

txt = '[abc] {abc} abc (abc) [abc]'

Écrivez une expression régulière qui trouvera les chaînes entre crochets et les remplacera par '!'.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser