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

Pourquoi re.sub avec re.MULTILINE ne remplace-t-il pas toutes les occurrences ?

Susan Sarandon
Libérer: 2024-11-05 15:48:02
original
923 Les gens l'ont consulté

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

Pourquoi re.sub avec re.MULTILINE ne remplace pas toutes les occurrences

La fonction re.sub de Python, conçue pour effectuer des remplacements de texte basés sur sur les expressions régulières, est souvent utilisé avec l'indicateur re.MULTILINE pour étendre le comportement de correspondance du caractère caret (^). Cependant, un résultat inattendu peut survenir lorsque vous tentez de remplacer toutes les occurrences d'un modèle à l'aide de cet indicateur.

Comprendre le problème :

La documentation officielle de re.MULTILINE indique qu'il doit permettre au caractère caret de correspondre au début de chaque ligne d'une chaîne. Pourtant, dans l'exemple suivant, toutes les occurrences de "//" ne sont pas supprimées comme prévu :

import re
s = """// The quick brown fox.
// Jumped over the lazy dog."""
result = re.sub('^//', '', s, re.MULTILINE)
print(result)
Copier après la connexion

La solution :

La différence réside dans l'utilisation du drapeau re.MULTILINE. Par défaut, le quatrième argument de re.sub est interprété comme un décompte et non comme un indicateur. Pour remédier à ce problème, on peut utiliser explicitement les drapeaux nommés argument, comme vu ci-dessous :

result = re.sub('^//', '', s, flags=re.MULTILINE)
Copier après la connexion

Alternativement, l'expression régulière peut être précompilée avec la fonction re.compile pour incorporer le drapeau re.MULTILINE :

regex = re.compile('^//', re.MULTILINE)
result = re.sub(regex, '', s)
Copier après la connexion

En spécifiant l'argument flags ou en précompilant l'expression régulière avec l'indicateur souhaité, la fonction re.sub remplacera correctement toutes les occurrences du motif, quels que soient les sauts de ligne.

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