wersja Pythona z stripslashes PHP,

głosy
10

Napisałem kawałek kodu do konwersji striplashes PHP do prawidłowych [backslash] ucieczek Pythona:

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

W jaki sposób można skondensować ją?

Utwórz 17/08/2008 o 02:23
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
12

Nie całkowicie pewien, że to, co chcesz, ale ..

cleaned = stringwithslashes.decode('string_escape')
Odpowiedział 17/08/2008 o 13:15
źródło użytkownik

głosy
2

Brzmi jak co chcesz może być rozsądnie sprawnie obsługiwane przez wyrażeń regularnych:

import re
def stripslashes(s):
    r = re.sub(r"\\(n|r)", "\n", s)
    r = re.sub(r"\\", "", r)
    return r
cleaned = stripslashes(stringwithslashes)
Odpowiedział 17/08/2008 o 13:55
źródło użytkownik

głosy
0

posługiwać się decode('string_escape')

cleaned = stringwithslashes.decode('string_escape')

Za pomocą

string_escape : Produce ciąg znaków, który nadaje się jako ciąg dosłownym w kodzie źródłowym Pythona

lub złączyć replace () jak Wilson's odpowiedź.

cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")
Odpowiedział 18/02/2014 o 20:02
źródło użytkownik

głosy
0

Można oczywiście łączyć wszystko ze sobą:

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

Czy to jest to, czego szukali? Albo miałeś nadzieję na coś bardziej zwięzły?

Odpowiedział 17/08/2008 o 02:26
źródło użytkownik

głosy
-4

Python posiada wbudowaną escape () funkcję analogiczną do addslashes PHP, ale nie unescape () function (stripslashes), który w głowie niby śmieszne.

Wyrażenia regularne na ratunek (kod nie testowane):

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

W teorii, że bierze niczego postaci \\ (nie spacji) i zwraca \ (sam char)

edit: Po dalszej inspekcji, wyrażenia regularne Python są podzielone jak diabli;

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

Podsumowując, co do diabła, Python.

Odpowiedział 17/08/2008 o 11:28
źródło użytkownik

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