Удалить цветовые коды ASCII

Итак, у меня проблема. Я ловлю некоторые вещи из Logger, и вывод выглядит примерно так:

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

Мне нужно знать, как удалить эти надоедливые цветовые коды ASCII (или разобрать их).

2 ответа

Решение

Если они не повреждены, они должны состоять из ESC (U+001B) плюс [ плюс разделенный точкой с запятой список чисел, плюс m, (См. /questions/27464898/vyivod-tsveta-programmyi-zapuschennoj-pod-bash/27464914#27464914.) В этом случае вы можете удалить их, написав:

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

,,, или вы можете воспользоваться ими, используя less -r при изучении ваших журналов.:-)

(Примечание: это характерно для цветовых кодов. Если вы также найдете другие escape-последовательности ANSI, вы захотите обобщить это немного. Я думаю, что довольно общее регулярное выражение будет \u001B\\[[;\\d]*[ -/]*[@-~], Вы можете найти http://en.wikipedia.org/wiki/ANSI_escape_code полезным.)

Если последовательности не повреждены, то есть если они каким-то образом были искажены, вам придется исследовать и выяснить, что именно произошло.

Как насчет этого регулярного выражения

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

На основе формата, найденного здесь: http://bluesock.org/~willg/dev/ansi.html

Другие вопросы по тегам