Ответ 1
Не совсем уверен, что это то, что вы хотите, но..
cleaned = stringwithslashes.decode('string_escape')
Я написал фрагмент кода для преобразования PHP-striplashes в допустимые escape-последовательности Python [backslash]:
cleaned = stringwithslashes
cleaned = cleaned.replace('\\n', '\n')
cleaned = cleaned.replace('\\r', '\n')
cleaned = cleaned.replace('\\', '')
Как я могу конденсировать его?
Не совсем уверен, что это то, что вы хотите, но..
cleaned = stringwithslashes.decode('string_escape')
Похоже, что вы можете разумно эффективно обрабатывать регулярные выражения:
import re
def stripslashes(s):
r = re.sub(r"\\(n|r)", "\n", s)
r = re.sub(r"\\", "", r)
return r
cleaned = stripslashes(stringwithslashes)
Вы можете, очевидно, объединить все вместе:
cleaned = stringwithslashes.replace("\\n","\n").replace("\\r","\n").replace("\\","")
Это то, чем вы были? Или вы надеялись на что-то более краткое?
использовать decode('string_escape')
cleaned = stringwithslashes.decode('string_escape')
Используя
string_escape. Создайте строку, которая подходит как строковый литерал в исходном коде Python.
или объедините замену(), как ответ Уилсона.
cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")
У 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.