Python версия PHP stripslashes

Я написал фрагмент кода для преобразования PHP-striplashes в допустимые escape-последовательности Python [backslash]:

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

Как я могу конденсировать его?

Ответ 1

Не совсем уверен, что это то, что вы хотите, но..

cleaned = stringwithslashes.decode('string_escape')

Ответ 2

Похоже, что вы можете разумно эффективно обрабатывать регулярные выражения:

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

Ответ 3

Вы можете, очевидно, объединить все вместе:

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

Это то, чем вы были? Или вы надеялись на что-то более краткое?

Ответ 4

использовать decode('string_escape')

cleaned = stringwithslashes.decode('string_escape')

Используя

string_escape. Создайте строку, которая подходит как строковый литерал в исходном коде Python.

или объедините замену(), как ответ Уилсона.

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

Ответ 5

У Python есть встроенная функция escape(), аналогичная PHP addlashes, но не функция unescape() (stripslashes), которая, на мой взгляд, нелепо.

Регулярные выражения для спасения (код не проверен):

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

В теории, которая принимает что-либо вида\\(а не пробел) и возвращает\(тот же char)

edit: при дальнейшем проверке регулярные выражения Python нарушаются как ад,

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

В заключение, что, черт возьми, Python.