6

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

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

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

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

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

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

4

1 回答 1

6

大多数 ANSI VT100 序列具有以下格式ESC [,可选地后跟一个数字或由 分隔的两个数字;,后跟一些不是数字或的字符;。所以像

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

或者

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

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

您发布的正则表达式中的一些替代项以 开头\\[,而不是转义字符,这可能意味着您可能正在删除一些您不应该删除的文本,或者删除控制序列的一部分但保留 ESC 字符。

于 2014-08-07T18:47:37.097 回答