2013-10-12 3 views
0

Je suis en train de créer un regex pour remplacer toutes les occurrences de mots de la chaîne stockée dans word dans une chaîne cible:Comment se fait-il que je ne puisse pas créer cette regex avec une variable en python?

regex = re.compile("\\b" + word + "\\b") 

Python se plaint avec « raise erreur, v # expression non valide ». Pourquoi y a-t-il une erreur? Je me suis assuré d'échapper à mes backslashes, non?

+1

Quel est le contenu de' word'? – nemo

+0

're.compile (" \\ b "+" lalala "+" \\ b ")' fonctionne bien pour moi. Qu'est-ce que vous obtenez lorsque vous «imprimer un mot»? –

+3

Vous pouvez utiliser 're.escape (word)' s'il est fourni par l'utilisateur. Cela protégera votre code de plantage s'il contient des éléments de modèle regex non valides. Si vous voulez permettre 'word' de contenir des choses regex, vous avez probablement juste besoin d'attraper l'exception et donner des commentaires appropriés à l'utilisateur. – Blckknght

Répondre

4

Depuis re.compile ne sait pas qu'une partie de son entrée provient de l'utilisateur, vous devez utiliser re.escape pour faire des caractères spéciaux (comme entre parenthèses) dans word correspondent à ces personnages au lieu de prendre sur leur signification spéciale à l'intérieur des expressions régulières, comme celui-ci : `` `

import re 
word = 'Par(ens' 
regex = re.compile("\\b" + re.escape(word) + "\\b") 
Questions connexes