Подтвердить что ты не робот

Разделить строку на обратную косую черту в python

Простой вопрос, но я борюсь с ним слишком много времени. В принципе, я хочу разбить строку на\(обратная косая черта).

 a = "1\2\3\4"

Пытался избежать обратного слэша, но он, похоже, не работает:

 print(a.split('\'))
 print(a.split('"\"'))
 print(a.split('\\'))
 print(a.split('"\\"'))

Я хочу получить этот результат:

 ['1','2','3','4']

Большое спасибо заранее

4b9b3361

Ответ 1

У вас есть правильная идея, избегая обратных косых черт, но, несмотря на то, как она выглядит, ваша строка ввода фактически не имеет никаких обратных косых черт. Вам также нужно сбежать от них на вкладке!

>>> a = "1\\2\\3\\4"  # Note the doubled backslashes here!
>>> print(a.split('\\'))  # Split on '\\'
['1', '2', '3', '4']

Вы также можете использовать строковый литерал для ввода, если он может иметь много обратных косых черт. Эта нотация гораздо понятнее (IMO), но она имеет некоторые ограничения: прочитайте документы!

>>> a = r"1\2\3\4"
>>> print(a.split('\\'))
['1', '2', '3', '4']

Если вы получаете a в другом месте, а a.split('\\') не разделяется на видимые обратные косые черты, это означает, что у вас есть что-то еще вместо реальных обратных косых черт. Попробуйте print(repr(a)), чтобы увидеть, как выглядит буквальная строка.

>>> a = '1\2\3\4'
>>> print(a)
1☻♥♦
>>> print(repr(a))
'1\x02\x03\x04'

>>> b = '1\\2\\3\\4'
>>> print(b)
1\2\3\4
>>> print(repr(b))
'1\\2\\3\\4'

Ответ 2

Вы можете разделить строку на обратную косую черту с помощью a.split('\\').

Причина, по которой это не работает в вашем случае, заключается в том, что \x в вашем назначении a = "1\2\3\4" интерпретируется как восьмеричное число. Если вы префикс строки с r, вы получите ожидаемый результат.

Ответ 3

В соответствии с этим ответом:

fooobar.com/questions/19351/...

вам нужно будет избежать обратных косых черт перед их расщеплением:

>>> a = "1\2\3\4"
>>> a.encode('string-escape').split("\\x")
['1', '02', '03', '04']

Ответ 4

'\ r' помогает мне

var = 'a\b\c\d'  
var.split('\r')
['a', 'b', 'c', 'd']

Ответ 5

Охватывает все особые случаи, такие как \a,\b,\f,\n,\r,\t,\v (строковые литералы)

def split_str(str):
    ref_dict = {
        '\x07':'a',
        '\x08':'b',
        '\x0C':'f',
        '\n':'n',
        '\r':'r',
        '\t':'t',
        '\x0b':'v',                
    }    
    res_arr = []
    temp = ''
    for i in str :
        if not i == '\\':
            if i in ref_dict:
                if not temp == "":
                    res_arr.append(temp)
                res_arr.append(ref_dict[i])
                temp = ''
            else:    
                temp += i
        else:
            if not temp == '':
                res_arr.append(temp)
            temp = ''
    res_arr.append(temp)
    return res_arr


str = "a\a\b\f\n\r\t\v\c\d\e\f\i"
print(split_str(str))