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

时间:2014-08-07 18:32:37

标签: java ansi jsch vt100

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

我在解析命令结果时遇到问题,因为有时它们会带有ANSI Control chars

我已经看过this answerthis other one,但它没有提供任何库来执行此操作。如果有的话,我不想重新发明轮子。而且我对这些答案没有信心。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

这样的东西
;

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

应该抓住大部分人。可能还有其他情况可以单独添加。 (我没有测试过这个。)

您发布的正则表达式中的某些替代方法以reply = reply.replaceAll("\\e\\[[\\d;]*[^\\d;]",""); // \e matches escape character 开头,而不是转义字符,这可能意味着您可能正在删除某些您不应删除的文本,或删除部分控制序列,但保留ESC字符。