2008-08-17 7 views
10

j'ai écrit un morceau de code pour convertir les striplashes de PHP en Python valides [] antislash échappe:Python version des stripslashes PHP

cleaned = stringwithslashes 
cleaned = cleaned.replace('\\n', '\n') 
cleaned = cleaned.replace('\\r', '\n') 
cleaned = cleaned.replace('\\', '') 

Comment puis-je condensent?

Répondre

0

Vous pouvez évidemment concaténer tout ensemble:

cleaned = stringwithslashes.replace("\\n","\n").replace("\\r","\n").replace("\\","") 

Est-ce ce que vous étiez après? Ou espériez-vous quelque chose de plus concis?

-4

Python possède une fonction intégrée escape() analogue aux addslashes de PHP, mais pas de fonction unescape() (stripslashes), ce qui dans mon esprit est plutôt ridicule.

expressions régulières à la rescousse (code non testé):

p = re.compile('\\(\\\S)') 
p.sub('\1',escapedstring) 

En théorie qui prend quoi que ce soit de la forme \\ (pas des espaces) et retourne \ (même char)

modifier: Sur une inspection plus poussée, les expressions régulières de Python sont brisées comme un enfer;

>>> escapedstring 
'This is a \\n\\n\\n test' 
>>> p = re.compile(r'\\(\S)') 
>>> p.sub(r"\1",escapedstring) 
'This is a nnn test' 
>>> p.sub(r"\\1",escapedstring) 
'This is a \\1\\1\\1 test' 
>>> p.sub(r"\\\1",escapedstring) 
'This is a \\n\\n\\n test' 
>>> p.sub(r"\(\1)",escapedstring) 
'This is a \\(n)\\(n)\\(n) test' 

En conclusion, que diable, Python.

12

Pas tout à fait sûr que ce soit ce que vous voulez, mais ..

cleaned = stringwithslashes.decode('string_escape') 
+0

sauvez-moi des millions de jours. +1 –

2

On dirait que ce que vous voulez pourrait raisonnablement être efficacement traitées par des expressions régulières:

import re 
def stripslashes(s): 
    r = re.sub(r"\\(n|r)", "\n", s) 
    r = re.sub(r"\\", "", r) 
    return r 
cleaned = stripslashes(stringwithslashes) 
0

utilisation decode('string_escape')

cleaned = stringwithslashes.decode('string_escape') 

Utilisation de

string_escape: Produire une chaîne qui est approprié comme chaîne de caractères dans le code source python

ou concaténer les remplacer() comme réponse Wilson's.

cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")