我能想到的最简单的方法是使用str.split
及其maxsplit
参数:
In [1]: output = "\"\\u001b[H\\u001b[2J\\r\\nPROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT\""
In [2]: output.split('\\r\\n', maxsplit=1)[-1]
Out[2]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT"'
如果您使用的是旧版本的 python(我相信 python2 和 python3.x,x <= 2),您可能需要将 指定maxsplit
为位置参数:
In [3]: output.split('\\r\\n', 1)[-1]
Out[3]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT"'
输出开头的垃圾似乎是一个清除终端的转义序列(至少,这样做:
print "\u001b[H\u001b[2J\r\nPRINT ME".decode('unicode-escape')
在 Konsole 中具有此效果。
假设格式始终是十六进制数字形式的 unicode 转义"UTUT\r\n
,并且是由加号和字母组成的终端转义,以下应该能够去掉第一个字符:U
\uxxxx
x
T
[
In [9]: regex = re.compile(r'"\\u(\d|[a-f])+\[(\w|\d)+\\u(\d|[a-f])+\[(\d|\w)+\\r\\n')
In [10]: regex.sub('', output)
Out[10]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT"'
如果你不想要最后一个"
,你可以简单地做:
regex.sub('', output)[:-1]
这将简单地修剪字符串的开头并删除最后一个字符。如果由于某种原因 the"
可能不是您可以使用的最后一个字符:
In [2]: regex = re.compile(r'"\\u(\d|[a-f])+\[(\w|\d)+\\u(\d|[a-f])+\[(\d|\w)+\\r\\n(?P<content>[^"]+)')
In [3]: output = "\"\\u001b[H\\u001b[2J\\r\\nPROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT\""
In [4]: regex.match(output).group('content')
Out[4]: 'PROCESS1 : process not running\\r\\n \\r\\nPROCESS2 : process running\\r\\nT'
我假设您需要的字符串不包含"
.