Question

La documentation Python dit :

re.MULTILINE :Lorsqu'il est spécifié, le caractère de modèle '^' correspond au début de la chaîne et au début de chaque ligne (immédiatement après chaque nouvelle ligne)...Par défaut, '^' ne correspond qu'au début de la chaîne...

Alors, que se passe-t-il lorsque j'obtiens le résultat inattendu suivant ?

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
Était-ce utile?

La solution

Regardez la définition de re.sub:

sub(pattern, repl, string[, count])

Le 4ème argument est le nombre que vous utilisez re.MULTILINE (qui vaut 8) comme décompte, pas comme drapeau.

Vous devez compiler votre regex si vous souhaitez utiliser des indicateurs.

re.sub(re.compile('^//', re.MULTILINE), '', s)

UN flags L'argument a été ajouté dans Python 2.7, donc la définition complète est maintenant :

re.sub(pattern, repl, string[, count, flags])

Ce qui signifie que:

re.sub('^//', '', s, flags=re.MULTILINE)

travaux.

Autres conseils

re.sub('(?m)^//', '', s)

La définition complète de re.sub est:

re.sub(pattern, repl, string[, count, flags])

Ce qui signifie que si vous indiquez à Python quels sont les paramètres, vous pouvez alors transmettre flags sans passer count:

re.sub('^//', '', s, flags=re.MULTILINE)

ou, de manière plus concise :

re.sub('^//', '', s, flags=re.M)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top