Maison  >  Article  >  développement back-end  >  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
Susan Sarandonoriginal
2024-11-05 15:48:02852parcourir

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)

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)

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)

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!

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