我正在使用自动化并使用 Jsch 连接到远程盒子并自动执行一些任务。
我在解析命令结果时遇到问题,因为有时它们会附带 ANSI Control chars .
我已经看到了 this answer和 this other one但它不提供任何图书馆来做到这一点。我不想重新发明轮子,如果有的话。我对这些答案没有信心。
现在,我正在尝试这个,但我不确定它是否足够完整。
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
我想应该能捕获其中的大部分。可能还有其他情况您可以单独添加。 (我没有测试过这个。)
您发布的正则表达式中的一些备选方案以 \\[
开头,而不是转义字符,这可能意味着您可能会删除一些您不应该删除的文本,或者删除部分控制序列但保留 ESC 字符。
关于java - 如何从 Java 字符串中删除 ANSI 控制字符 (VT100),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25189651/