如何从Java字符串中删除ANSI控制字符(VT100)



我正在使用自动化,并使用Jsch连接到远程盒子并自动执行一些任务。

我在解析命令结果时遇到问题,因为有时它们带有ANSI控制字符。

我已经看到了这个答案和另一个,但它没有提供任何库来做这个。如果有的话,我不想重新发明轮子。我对这些答案没有信心。

现在,我正在尝试这个,但我不确定它是否足够完整。

reply = reply.replaceAll("\[..;..[m]|\[.{0,2}[m]|\(Page \d+\)|u001B\[[K]|u001B|u000F", "");

如何从Java字符串中删除ANSI控制字符(VT100) ?

大多数ANSI VT100序列的格式为ESC [,可选地后跟一个数字或由;分隔的两个数字,后跟一些不是数字或;的字符。比如

reply = reply.replaceAll("u001B\[[\d;]*[^\d;]","");

reply = reply.replaceAll("\e\[[\d;]*[^\d;]","");  // e matches escape character
我认为

应该抓住他们中的大多数。还可以单独添加其他情况。(我还没有测试过)

您发布的regex中的一些替代方案以\[开始,而不是转义字符,这可能意味着您可以删除一些您不应该删除的文本,或者删除控制序列的一部分,但在

中留下ESC字符。

最新更新