删除 ASCII 颜色代码

2022-09-03 09:16:47

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

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

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


答案 1

如果它们完好无损,它们应该由 ESC () 加上以分号分隔的数字列表和 .(请参阅 https://stackoverflow.com/a/9943250/978917。在这种情况下,您可以通过编写以下内容来删除它们:U+001B[m

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

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

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

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


答案 2

这个正则表达式怎么样

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

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