Python-версия PHP-разметки

Я написал фрагмент кода, чтобы преобразовать полоски в PHP в действительные экранированные символы Python [backslash]:

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

Как я могу сжать это?

17.08.2008 01:23:50
5 ОТВЕТОВ

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

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

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

0
17.08.2008 01:26:52

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

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

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

В теории это принимает что-нибудь в форме \\ (не пробел) и возвращает \ (тот же символ)

редактировать: при дальнейшей проверке регулярные выражения 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'

В заключение, какого черта, Питон.

-4
17.08.2008 10:48:37

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

cleaned = stringwithslashes.decode('string_escape')
13
17.08.2008 12:15:13

Похоже, что то, что вы хотите, может быть достаточно эффективно обработано с помощью регулярных выражений:

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

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

cleaned = stringwithslashes.decode('string_escape')

С помощью

string_escape : создает строку, которая подходит в качестве строкового литерала в исходном коде Python.

или объединить replace () как ответ Уилсона.

cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")
0
18.02.2014 19:02:19