Salut,
Je voudrais faire une substitution avec des chaines qui contiennent '\'. Je me heurte à un soucis : visiblement le '\' d'échapemment est supprimé à chaque fois que la chaine '<char>' est interprétable en ascii.
Par exemple :
$ ipython
Python 2.7.2+ (default, Dec 18 2011, 00:33:35)
In [1]: import re
In [2]: re.sub('pattern', '\\test', 'replace the pattern by \\test')
Out[2]: 'replace the \test by \\test'
In [3]: re.sub('pattern', '\\lest', 'replace the pattern by \\lest')
Out[3]: 'replace the \\lest by \\lest'
In [4]: re.sub('pattern', '\\nest', 'replace the pattern by \\nest')
Out[4]: 'replace the \nest by \\nest'
Normalement, dans tous les cas, j'aimerais ne pas voir disparaître mon '\' d'échappement. Qu'en pensez vous ? Bug ou feature ? Avez vous déjà rencontré ça ? Comment surmonter ce détail ?
# Bon, en fait c'est documenté ...
Posté par Pol' uX (site web personnel) . Évalué à 2.
http://docs.python.org/library/re.html#re.sub
Adhérer à l'April, ça vous tente ?
[^] # Re: Bon, en fait c'est documenté ...
Posté par Pol' uX (site web personnel) . Évalué à 2.
La solution est expliquée ici : http://docs.python.org/howto/regex.html#the-backslash-plague
Il faut escaper à un niveau supplémentaire le motif de remplacement. Ainsi on a :
Adhérer à l'April, ça vous tente ?
# raw string
Posté par GaMa (site web personnel) . Évalué à 2.
Il faut utiliser des raw strings
http://docs.python.org/reference/lexical_analysis.html#string-literals
Matthieu Gautier|irc:starmad
[^] # Re: raw string
Posté par Pol' uX (site web personnel) . Évalué à 2. Dernière modification le 05 janvier 2012 à 15:30.
Merci, mais je ne sais pas utiliser des raw strings lorsque mon motif de remplacement est le contenu d'un fichier.
Adhérer à l'April, ça vous tente ?
[^] # Re: raw string
Posté par GaMa (site web personnel) . Évalué à 3.
Ha ben faut donner le problème en entier aussi :)
C'est un peu bourrin, mais ça marche :
tu peux aussi convertir ta chaine en raw string :
http://code.activestate.com/recipes/65211-convert-a-string-into-a-raw-string/
Par contre je sais pas vraiment quelle est la différence en terme de résultat entre les deux méthode...
Matthieu Gautier|irc:starmad
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.