Maison  >  Article  >  développement back-end  >  Regex Python : le préfixe \"r\" est-il obligatoire pour les séquences d'échappement ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-19 17:03:31294parcourir

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>

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!

Déclaration:
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