Maison > développement back-end > Tutoriel Python > Pourquoi « re.sub » par « re.MULTILINE » ne remplace-t-il pas toutes les occurrences ?

Pourquoi « re.sub » par « re.MULTILINE » ne remplace-t-il pas toutes les occurrences ?

Mary-Kate Olsen
Libérer: 2024-11-05 17:37:02
original
622 Les gens l'ont consulté

Why Doesn't `re.sub` with `re.MULTILINE` Replace All Occurrences?

L'indicateur re.sub de Python avec re.MULTILINE ne parvient pas à remplacer toutes les occurrences

La documentation Python indique que l'indicateur re.MULTILINE, lorsque spécifié, permet au modèle "^" de correspondre au début de la chaîne et au début de chaque ligne. Cependant, un comportement déroutant se produit lors de l'utilisation de cet indicateur avec re.sub.

Considérez le code suivant :

<code class="python">import re

s = """// The quick brown fox.
... // Jumped over the lazy dog."""

print(re.sub('^//', '', s, re.MULTILINE))</code>
Copier après la connexion

Ce code vise à supprimer toutes les occurrences du commentaire "//" à le début de chaque ligne. Cependant, le résultat laisse de manière inattendue une occurrence intacte :

 The quick brown fox.
// Jumped over the lazy dog.
Copier après la connexion

Comprendre le problème

La cause de ce comportement réside dans l'utilisation incorrecte du quatrième argument dans le fonction re.sub. Cet argument est destiné à spécifier le nombre de correspondances à remplacer, et non comme un indicateur. Dans le code donné, le re.MULTILINE (qui a une valeur de 8) est utilisé comme décompte, pas comme indicateur.

Correction du code

Pour résoudre le problème, il existe deux approches possibles :

  • Utiliser un argument nommé :
<code class="python">print(re.sub('^//', '', s, flags=re.MULTILINE))</code>
Copier après la connexion
  • Compiler le Regex First :
<code class="python">print(re.sub(re.compile('^//', re.MULTILINE), '', s))</code>
Copier après la connexion

Ces deux méthodes utilisent correctement re.MULTILINE comme indicateur, ce qui entraîne le comportement souhaité :

The quick brown fox.
Jumped over the lazy dog.
Copier après la connexion

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.cn
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