Удалить цветовые коды 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