我有一個讀取Minecraft控制檯輸出的程序,並將其放入Qt文本編輯字段(不相關)。但是,Minecraft控制檯使用ANSI顏色代碼([0;32;1m
)輸出顏色,我希望它們採用HTML格式(因爲Qt文本編輯字段會讀取這些顏色)。Python:將ANSI顏色代碼轉換爲HTML
我研究了一下,發現了一堆需要樣式表的解決方案,這不是我想要的。我想要的是一個簡單的<span style="color: green"></span>
或類似的,內聯。
任何人都可以幫助我實現這個目標嗎?
我有一個讀取Minecraft控制檯輸出的程序,並將其放入Qt文本編輯字段(不相關)。但是,Minecraft控制檯使用ANSI顏色代碼([0;32;1m
)輸出顏色,我希望它們採用HTML格式(因爲Qt文本編輯字段會讀取這些顏色)。Python:將ANSI顏色代碼轉換爲HTML
我研究了一下,發現了一堆需要樣式表的解決方案,這不是我想要的。我想要的是一個簡單的<span style="color: green"></span>
或類似的,內聯。
任何人都可以幫助我實現這個目標嗎?
import re
COLOR_DICT = {
'31': [(255, 0, 0), (128, 0, 0)],
'32': [(0, 255, 0), (0, 128, 0)],
'33': [(255, 255, 0), (128, 128, 0)],
'34': [(0, 0, 255), (0, 0, 128)],
'35': [(255, 0, 255), (128, 0, 128)],
'36': [(0, 255, 255), (0, 128, 128)],
}
COLOR_REGEX = re.compile(r'\[(?P<arg_1>\d+)(;(?P<arg_2>\d+)(;(?P<arg_3>\d+))?)?m')
BOLD_TEMPLATE = '<span style="color: rgb{}; font-weight: bolder">'
LIGHT_TEMPLATE = '<span style="color: rgb{}">'
def ansi_to_html(text):
text = text.replace('[m', '</span>')
def single_sub(match):
argsdict = match.groupdict()
if argsdict['arg_3'] is None:
if argsdict['arg_2'] is None:
color, bold = argsdict['arg_1'], 0
else:
color, bold = argsdict['arg_1'], int(argsdict['arg_2'])
else:
color, bold = argsdict['arg_2'], int(argsdict['arg_3'])
if bold:
return BOLD_TEMPLATE.format(COLOR_DICT[color][1])
return LIGHT_TEMPLATE.format(COLOR_DICT[color][0])
return COLOR_REGEX.sub(single_sub, text)
print ansi_to_html('[06-10-13 21:28:23] [INFO] [0;31;1mUsage: /kick [reason ...][m')
print ansi_to_html('[06-10-13 21:28:23] [INFO] [31;0mUsage: /kick [reason ...][m')
print ansi_to_html('[06-10-13 21:28:23] [INFO] [31mUsage: /kick [reason ...][m')
[06-10-13 21:28:23] [INFO] <span style="color: rgb(128, 0, 0); font-weight: bolder">Usage: /kick [reason ...]</span>
[06-10-13 21:28:23] [INFO] <span style="color: rgb(255, 0, 0)">Usage: /kick [reason ...]</span>
[06-10-13 21:28:23] [INFO] <span style="color: rgb(255, 0, 0)">Usage: /kick [reason ...]</span>
「ansi_code」和「text」參數有什麼作用?我把哪個文本放進去?另一個用於什麼? – user1438098
'ansi_code'是你希望'文字'在''元素中具有的ansi顏色代碼。 –
所以......如果我有這樣的文本字符串:'[06-10-13 21:28:23] [INFO] [0; 31; 1mUsage:/ kick [reason ...] [m'怎麼會我將其轉換爲HTML?對不起,如果我看起來很愚蠢,我可能是:) – user1438098
也許[此包](https://pypi.python.org/pypi/ansi2html)可以提供幫助嗎? –
@TimPeters我檢查了一個,但是那樣做了我不想要的一堆類定義的樣式表。 – user1438098