我正在使用自动化并使用Jsch连接到远程盒子并自动执行某些任务。
我在解析命令结果时遇到问题,因为有时它们会带有ANSI Control chars。
我已经看过this answer和this other one,但它没有提供任何库来执行此操作。如果有的话,我不想重新发明轮子。而且我对这些答案没有信心。
现在,我正在尝试这个,但我不确定它是否足够完整。
reply = reply.replaceAll("\\[..;..[m]|\\[.{0,2}[m]|\\(Page \\d+\\)|\u001B\\[[K]|\u001B|\u000F", "");
如何从Java String中删除ANSI控制字符(VT100)?
答案 0 :(得分:4)
大多数ANSI VT100序列的格式为ESC
[
,可选地后跟一个数字或由;
分隔的两个数字,后跟一些不是数字的字符或{{ 1}}。像
;
或
reply = reply.replaceAll("\u001B\\[[\\d;]*[^\\d;]","");
我想,应该抓住大部分人。可能还有其他情况可以单独添加。 (我没有测试过这个。)
您发布的正则表达式中的某些替代方法以reply = reply.replaceAll("\\e\\[[\\d;]*[^\\d;]",""); // \e matches escape character
开头,而不是转义字符,这可能意味着您可能正在删除某些您不应删除的文本,或删除部分控制序列,但保留ESC字符。