versão Python de stripslashes do PHP

votos
10

Eu escrevi um pedaço de código para converter striplashes do PHP em válidos Python [barra invertida] escapes:

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

Como posso condensá-lo?

Publicado 17/08/2008 em 02:23
fonte usuário
Em outras línguas...                            


5 respostas

votos
12

Não totalmente certo de que este é o que você quer, mas ..

cleaned = stringwithslashes.decode('string_escape')
Respondeu 17/08/2008 em 13:15
fonte usuário

votos
2

Parece que o que você quer pode ser razoavelmente eficiente tratadas através de expressões regulares:

import re
def stripslashes(s):
    r = re.sub(r"\\(n|r)", "\n", s)
    r = re.sub(r"\\", "", r)
    return r
cleaned = stripslashes(stringwithslashes)
Respondeu 17/08/2008 em 13:55
fonte usuário

votos
0

usar decode('string_escape')

cleaned = stringwithslashes.decode('string_escape')

utilização

string_escape : Produzir uma cadeia que é adequado como string literal em código-fonte Python

ou concatenar o replace () como resposta Wilson's.

cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")
Respondeu 18/02/2014 em 20:02
fonte usuário

votos
0

Você pode, obviamente, concatenar tudo junto:

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

É isso que você estava atrás? Ou você estava esperando por algo mais concisa?

Respondeu 17/08/2008 em 02:26
fonte usuário

votos
-4

Python tem uma função built-in escape () análogo ao addslashes do PHP, mas nenhuma função unescape () (stripslashes), que na minha mente é uma espécie de ridículo.

As expressões regulares para o resgate (código não testado):

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

Na teoria que leva qualquer coisa da forma \\ (não espaços em branco) e retorna \ (o mesmo de char)

edit: Após uma inspecção mais aprofundada, expressões regulares Python são quebrados como o inferno;

>>> 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'

Em conclusão, o que o inferno, Python.

Respondeu 17/08/2008 em 11:28
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more