Échapper les caractères
Le problème exposé dans ce sujet a été résolu.
Salut Zesteurs & Zesteuses,
Je suis en train de créer un petit langage de programmation Lisp-like (peut être que je ferai un tutoriel dessus). Cependant, au moment d'implémenter les caractères échappés, je fais face à un problème:
Je voudrais remplacer tous les caractères précédés d'un backslash par le caractère échappé correspondant sans avoir à traiter tous les caractères un à un. Ce que je voudrais faire en gros c'est un petit s.replace('\\', '\')
mais malheureusement ça lève une SyntaxError (eh oui le dernier guillemet simple est échappé !). J'ai déjà essayé plusieurs alternatives comme l'unicode avec '\x5c' (92 en hexadécimal, l'ASCII du backslash) ou encore avec chr
et ord
. Je suis bloqué par ce problème un peu idiot depuis 2h…
Merci d'avance,
AZ.
En fait pour faire ce que tu veux il suffit de faire s.replace('\\\\', '\\')
Si tu te sers de la fonction len()
sur les deux chaines, tu verras que la première compte deux caractères, et la deuxième un seul.
Ou alors s.replace(r'\\', r'\')
mais je pense dans tous les cas qu'il faudrait plutôt passer par des des regex et mettre un peu plus de logique, car les échappements sont généralement plus compliqué que ça.
Pour compléter ma remarque sur le soucis de cette façon de faire, j'imagine que tu va lancer les remplacement de chaque caractères un à un. Imagine que tu as le texte suivant "\\n"
dans un tel cas le résultat devrait être "\n"
. Or si tu fais simplement des recherches et remplacement sur l'ensemble indépendamment les unes des autres, ça ne marchera pas. Si tu veux le faire proprement il n'y a pas vraiment d'autres choix de parcourir la chaine caractère après caractère.
Mais comme bien souvent pour un truc si commun que ça, il y a déjà ça dans la lib standard. En python 3 par exemple :
| >>> a= r"blabla\\ntrucmush"
>>> a
'blabla\\\\ntrucmush'
>>> b=bytes(a, "utf-8").decode("unicode_escape")
>>> b
'blabla\\ntrucmush'
|
Ça marche ! Merci Kje et LoupSolitaire !
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte