在python中用反斜杠拆分字符串

时间:2014-07-30 22:23:42

标签: python

简单的问题,但我挣扎了太多时间。基本上我想用\(反斜杠)分割字符串。

 a = "1\2\3\4"

试图逃避反斜杠,但它似乎不起作用:

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

我想得到这个结果:

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

非常感谢提前

6 个答案:

答案 0 :(得分:36)

你有一个正确的想法,逃避反斜杠,但不管它看起来如何,你的输入字符串实际上没有任何反斜杠。你也需要在输入中转义它们!

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

如果输入可能有很多反斜杠,您也可以使用raw string literal作为输入。这种符号看起来更清晰(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'

答案 1 :(得分:5)

您可以使用a.split('\\')以反斜杠分割字符串。

在您的情况下,这不起作用的原因是您的作业\x中的a = "1\2\3\4"被解释为八进制数。如果您在字符串前加r,则会得到预期的结果。

答案 2 :(得分:2)

根据这个答案:

https://stackoverflow.com/a/2081708/3893465

你需要在分割之前逃避反斜杠:

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

答案 3 :(得分:0)

'\ r'为我完成了窍门

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

答案 4 :(得分:0)

涵盖所有特殊情况,例如\ a,\ b,\ f,\ n,\ r,\ t,\ v(String Literals

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

答案 5 :(得分:0)