我正在尝试从字符串中删除ANSI转义序列。
我已经尝试了this post中提出的所有解决方案,但没有一个有效,因此我得出结论,我的情况有点不同。
我有以下代码,应该已经取代了所有的ANSI转义序列:
print("ascii: " + ascii(string))
x = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])').sub('', string)
y = re.compile(br'(?:\x1B[@-Z\\-_]|[\x80-\x9A\x9C-\x9F]|(?:\x1B\[|\x9B)[0-?]*[ -/]*[@-~])').sub(b'', string.encode("utf-8"))
print("not escaped X: " + ascii(x))
print("not escaped Y: " + ascii(y))
但是,我得到了以下输出:
ascii: '\x1b[m>....\x1b[?1h\x1b=\x1b[?2004h>....\r\x1b[K\x1b[32m[03:33:57] blabla'
not escaped X: '>....\x1b=>....\r[03:33:57] blabla'
not escaped Y: b'>....\x1b=>....\r[03:33:57] blabla'
我如何替换所有的ANSI转义序列,使预期的结果是:[03:33:57] blabla
?
1条答案
按热度按时间mjqavswn1#
因此,以下代码确实正确地删除了ANSI转义序列:
字符串前面仍然留有
>....\x1b=>....\r
的原因是因为这些不是ANSI转义序列,而是一系列不可打印的字符。因此,要解决这个问题,我只需执行
.lstrip(">....\x1b=>....\r")
即可