2009-07-28 6 views
3

J'utilise Python 2.6 et reçois [ce que je pense est] sortie inattendue de re.sub()Quelqu'un peut-il expliquer cette sortie inattendue de Python re.sub()?

>>> re.sub('[aeiou]', '-', 'the cat sat on the mat') 
'th- c-t s-t -n th- m-t' 
>>> re.sub('[aeiou]', '-', 'the cat sat on the mat', re.IGNORECASE) 
'th- c-t sat on the mat' 

Si cette sortie est ce qui est attendu, quelle est la logique derrière tout cela?

Répondre

7

Oui, le quatrième paramètre est count, pas flags. Vous lui dites d'appliquer le motif deux fois (re.IGNORECASE = 2).

+0

Ah oui. Mélanger les paramètres. Je vous remercie. – kjfletch

4

Pour passer des drapeaux, vous pouvez utiliser re.compile

expression = re.compile('[aeiou]', re.IGNORECASE) 
expression.sub('-', 'the cat sat on the mat') 
0

Si vous avez mis à jour depuis poser cette question. Si vous utilisez Python 2.7+, vous n'avez pas besoin d'utiliser re.compile. Vous pouvez appeler sub et spécifier flags avec un argument nommé.

>>> import re 
>>> re.sub('[aeiou]', '-', 'the cat sat on the mat', flags=re.IGNORECASE) 
'th- c-t s-t -n th- m-t' 

Référence: https://docs.python.org/2/library/re.html#re.sub

Questions connexes