Maison > Article > développement back-end > Pourquoi « re.sub » par « re.MULTILINE » ne remplace-t-il pas toutes les 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 :
<code class="python">print(re.sub('^//', '', s, flags=re.MULTILINE))</code>
<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!