在Python中通过反斜杠拆分字符串

35

这是一个简单的问题,但我已经苦恼了很长时间。基本上我想通过 \(反斜杠)来分割字符串。

 a = "1\2\3\4"

尝试转义反斜杠,但似乎不起作用:

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

我希望你能翻译这个句子:

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

非常感谢您的提前帮助。


如果您按照 (a = "1\2\3\4") 的方式创建字符串,那么问题就在于您的 split 调用。请在字符串声明中转义 \ 或使用 r"" - Peter DeGlopper
6个回答

60

你对于转义反斜杠的想法是正确的,但是尽管看起来像有反斜杠,但是你的输入字符串实际上没有任何反斜杠。你需要在输入字符串中也进行转义!

>>> a = "1\\2\\3\\4"  # Note the doubled backslashes here!
>>> print(a.split('\\'))  # Split on '\\'
['1', '2', '3', '4']
你也可以使用原始字符串字面值作为输入,如果它可能有许多反斜杠。在我看来,这种表示法更清晰易懂,但它确实有一些限制:请阅读文档!
>>> 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'

如果一个变量不是像我的问题中的输入,而是函数的结果,该怎么办?想象一下:a = function();打印a的结果为a="1\2\3\4"。有没有一种方法将字符串转换为原始字符串? - user3184086
如果 print(a) 的结果是 1\2\3\4,那么你确实有反斜杠,并且在 '\\' 上分割 分割它们。如果不是这样,那就意味着你里面有其他字符:尝试使用 print(repr(a)) 来查看 a 的文字表示,包括转义字符。 - Henry Keiter
如果... a.split('\') 不能正确地在可见的反斜杠上进行分割,那么这意味着你在其中放入了其他东西而不是真正的反斜杠。尝试使用 print(repr(a)) 查看“字面”字符串的实际样子。 - abe

5

你可以使用a.split('\\')通过反斜杠来分割一个字符串。

在你的情况下,这种方法不起作用的原因是你的赋值语句a = "1\2\3\4"中的\x被解释为八进制数。如果你在字符串前加上r,你会得到预期的结果。


3

2

'\r' does the trick for me

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

1

涵盖所有特殊情况,如\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))    

0

在你的解释中添加一些代码示例,这样对于每个人来说都更容易理解。 - SwissCodeMen
你需要在字符串前面添加'r' - r'1\2\3' ,或者使用两个反斜杠 '1\2\3\4'。 - ivand58

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接