Python-версия PHP-полосатых косых черт - PullRequest
11 голосов
/ 17 августа 2008

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

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

Как мне это сжать?

Ответы [ 5 ]

13 голосов
/ 17 августа 2008

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

cleaned = stringwithslashes.decode('string_escape')
3 голосов
/ 17 августа 2008

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

import re
def stripslashes(s):
    r = re.sub(r"\\(n|r)", "\n", s)
    r = re.sub(r"\\", "", r)
    return r
cleaned = stripslashes(stringwithslashes)
0 голосов
/ 18 февраля 2014

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

cleaned = stringwithslashes.decode('string_escape')

Использование

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

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

cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")
0 голосов
/ 17 августа 2008

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

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

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

Теоретически это принимает что-то в форме \\ (не пробел) и возвращает \ (тот же символ)

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'

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

0 голосов
/ 17 августа 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...