Échapper les caractères

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

Anciennement AlphaZeta

+0 -0

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.

Blond, bouclé, toujours le sourire aux lèvres…

+0 -0
Staff

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.

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

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 :

1
2
3
4
5
6
>>> a= r"blabla\\ntrucmush"
>>> a
'blabla\\\\ntrucmush'
>>> b=bytes(a, "utf-8").decode("unicode_escape")
>>> b
'blabla\\ntrucmush'
+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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