Teh*_*uan 4 python escaping string-split multilinestring
如何有效地将包含反斜杠的多行字符串分割成单独的行,从而导致不需要的转义字符?
这是我正在处理的示例输入:
strInput = '''signalArr(0)="ASCB D\axx\bxx\fxx\nxx"
signalArr(1)="root\rxx\txx\vxx"'''
Run Code Online (Sandbox Code Playgroud)
我已经尝试过此操作(将单个反斜杠转换为双反斜杠。因此,反斜杠转义将具有优先级,并且随后的字符将被“正常”对待):
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)
Run Code Online (Sandbox Code Playgroud)
我想得到:
lineList = strInputProcessed.splitlines()
>> ['signalArr(0)="ASCB D\axx\bxx\fxx\nxx"','signalArr(1)="root\rxx\txx\vxx"']
Run Code Online (Sandbox Code Playgroud)
我得到了:
>> ['signalArr(0)="ASCB D\x07xx\x08xx', 'xx', 'xx"', 'signalArr(1)="root', 'xx\txx', 'xx"']
Run Code Online (Sandbox Code Playgroud)
尝试将输入存储为原始字符串,然后所有“ \ n”字符将自动转义:
>>> var = r'''abc\n
... cba'''
>>> print var
abc\n
cba
>>> var.splitlines()
['abc\\n', 'bca']
Run Code Online (Sandbox Code Playgroud)
(请注意'之前的r。这表示字符串是原始字符串)
另外,如果您希望转义现有字符串,而不是上面的替换命令,则可以将“ encode”与“ string-escape”一起使用。
>>> s = 'abc\nabc\nabc'
>>> s.encode('string-escape')
'abc\\nabc\\nabc'
Run Code Online (Sandbox Code Playgroud)
同样,如果需要,您可以撤消字符串的字符串转义。
>>> s.decode('string-escape')
Run Code Online (Sandbox Code Playgroud)
最后,以为我会在您的上下文中添加:
>>> 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"']
Run Code Online (Sandbox Code Playgroud)
即使多余的\出现在打印的字符串上,它们也不真正存在于内存中。迭代字符串将证明这一点,因为它不会为您提供用于转义的多余\字符。
>>> s = r'\a\b\c'
>>>
>>> for c in s:
... print c
\
a
\
b
\
c
>>> list(s)
['\\', 'a', '\\', 'b', '\\', 'c']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |