2013-02-01 155 views
3

所以,我有一个问题。我从记录仪捕捉一些东西,并且输出看起来是这样的:删除ASCII颜色代码

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

我需要知道如何去除这些讨厌的ASCII颜色代码(或对其进行解析)。

回答

15

如果他们是完整的,就应该由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。是有益的。)

如果序列完整—是,是,如果他们已经以某种方式被—错位,那么你就必须调查并找出什么忙玲已经发生。

+0

@ thefiscster510:不客气! – ruakh

+0

不错,但有些代码仍然存在:'[2K' – MariuszS

+0

@MariuszS:是的,我在括号内注明了这一点(倒数第二段)。 – ruakh