Regex Python : le préfixe \'r\' est-il obligatoire pour les séquences d'échappement ?

Susan Sarandon
Libérer: 2024-10-19 17:03:31
original
293 Les gens l'ont consulté

Python regex: Is the

Regex Python : démystifier le mythe du préfixe obligatoire « r » pour les séquences d'échappement

Question

Pourquoi le premier exemple ci-dessous fonctionne-t-il sans le Préfixe « r » avant une séquence d'échappement ? Il est communément admis qu'il devrait être obligatoire lorsqu'il s'agit de séquences d'échappement.

<code class="python"># example 1
import re
print(re.sub('\s+', ' ', 'hello     there      there'))
# prints 'hello there there' - not expected as r prefix is not used</code>
Copier après la connexion

Réponse

Le préfixe "r" n'est pas toujours nécessaire dans les modèles d'expression régulière, malgré la règle générale qui recommande son utiliser.

Dans les séquences d'échappement, la barre oblique inverse () sert d'indicateur pour interpréter une séquence spéciale de caractères ou pour échapper un caractère avec une signification particulière. Cependant, toutes les séquences précédées d'une barre oblique inverse ne sont pas considérées comme des séquences d'échappement valides.

Pour illustrer cela, considérons ces exemples :

  • 'n' est une séquence d'échappement qui correspond à la nouvelle ligne caractère.
  • r'n' est une chaîne littérale brute où la barre oblique inverse est conservée en tant que caractère littéral et le « n » n'est pas interprété comme une séquence d'échappement.

Quand le préfixe "r" n'est pas présent avant une séquence d'échappement, Python ne l'interprète que s'il s'agit d'une séquence d'échappement reconnue. En d'autres termes, il ne tentera pas d'interpréter des séquences d'échappement invalides telles que « s ».

Ce comportement peut être observé dans le premier exemple fourni :

  • 's' n'est pas une séquence d'échappement valide.
  • Le préfixe "r" est absent.
  • Le moteur d'expression régulière interprète le s comme un caractère littéral, et non comme une séquence d'échappement pour les espaces.
  • En conséquence, le modèle correspond et remplace un ou plusieurs caractères d'espace par un seul espace.

Cependant, lorsque le préfixe « r » est utilisé, tous les caractères du modèle sont interprétés littéralement. Cela signifie que r's' représente une barre oblique inverse littérale suivie de la lettre « s ».

Limitations et pièges

Bien que le préfixe « r » ne soit pas strictement requis pour toutes les séquences d'échappement, il est généralement Il est recommandé de l'utiliser, en particulier lorsque vous travaillez avec des modèles complexes incluant plusieurs séquences d'échappement. Cela permet d'éviter toute confusion et toute conséquence inattendue.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!