Python 3.5 包含反斜杠的多行字符串的分割线

Python 3.5 splitlines for multiline string containing backslashes

如何有效地将包含反斜杠的多行字符串拆分成单独的行?

这是我正在处理的示例输入:

strInput = '''signalArr(0)="ASCB D\axx\bxx\fxx\nxx"
signalArr(1)="root\rxx\txx\vxx"'''

我试过这个(将单反斜杠转换为双反斜杠。因此反斜杠转义将具有优先权并且后续字符将被处理 "normally"):

def doubleBackslash(inputString):
    inputString.replace('\','\\')
    inputString.replace('\a','\a')
    inputString.replace('\b','\b')
    inputString.replace('\f','\f')
    inputString.replace('\n','\n')
    inputString.replace('\r','\r')
    inputString.replace('\t','\t')
    inputString.replace('\v','\v')
    return inputString

strInputProcessed = doubleBackslash(strInput)

我想得到:

lineList = strInputProcessed.splitlines()

>> ['signalArr(0)="ASCB D\axx\bxx\fxx\nxx"','signalArr(1)="root\rxx\txx\vxx"']

我得到的:

>> ['signalArr(0)="ASCB D\x07xx\x08xx', 'xx', 'xx"', 'signalArr(1)="root', 'xx\txx', 'xx"']

尝试将您的输入存储为原始字符串,然后所有“\n”字符将自动转义:

>>> var = r'''abc\n
... cba'''
>>> print var
abc\n
cba
>>> var.splitlines()
['abc\n', 'bca']

(注意 ' 之前的 r。这表示字符串是原始字符串)

另外,如果您希望转义现有字符串,而不是上面执行的替换命令,您可以使用 'string-escape'.

编码
>>> s = 'abc\nabc\nabc'
>>> s.encode('string-escape')
'abc\nabc\nabc'

同样,如果需要,您可以撤消字符串的字符串转义。

>>> s.decode('string-escape')

最后,我想在你的上下文中添加:

>>> strInput = r'''signalArr(0)="ASCB D\axx\bxx\fxx\nxx"
... signalArr(1)="root\rxx\txx\vxx"'''
>>> strInput.splitlines()
['signalArr(0)="ASCB D\axx\bxx\fxx\nxx"', 'signalArr(1)="root\rxx\txx\vxx"']

尽管额外的 \ 出现在打印的字符串中,但它们并不真正存在于内存中。迭代字符串将证明这一点,因为它不会给你一个额外的用于转义的 \ 字符。

>>> s = r'\a\b\c'
>>>
>>> for c in s:
...  print c
\
a
\
b
\
c
>>> list(s)
['\', 'a', '\', 'b', '\', 'c']