13

所以,我有一个问题。我正在从记录器中捕获一些东西,输出看起来像这样:

11:41:19 [INFO] ←[35;1m[Server] hi←[m

我需要知道如何删除那些讨厌的 ASCII 颜色代码(或解析它们)。

4

2 回答 2

38

如果它们是完整的,它们应该由 ESC ( U+001B)[加上一个分号分隔的数字列表,加上m。(请参阅https://stackoverflow.com/a/9943250/978917。)在这种情况下,您可以通过以下方式删除它们:

final String msgWithoutColorCodes =
    msgWithColorCodes.replaceAll("\u001B\\[[;\\d]*m", "");

. . . less -r或者您可以在检查日志时使用它们来利用它们。:-)

(注意:这是特定于颜色代码的。如果您还发现其他 ANSI 转义序列,则需要对其进行概括。我认为一个相当通用的正则表达式是\u001B\\[[;\\d]*[ -/]*[@-~]。您可以找到http://en.wikipedia.org /wiki/ANSI_escape_code会有所帮助。)

如果序列完整——也就是说,如果它们以某种方式被破坏了——那么你必须调查并弄清楚到底发生了什么破坏。

于 2013-02-01T18:28:45.603 回答
-1

这个正则表达式怎么样

replaceAll("\\d{1,2}(;\\d{1,2})?", "");

基于此处找到的格式:http: //bluesock.org/~willg/dev/ansi.html

于 2013-02-01T18:28:25.617 回答