Maison  >  Article  >  développement back-end  >  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
Mary-Kate Olsenoriginal
2024-11-05 17:37:02535parcourir

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>

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.

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>
  • Compiler le Regex First :
<code class="python">print(re.sub(re.compile('^//', re.MULTILINE), '', s))</code>

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.

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