如何使用終端中彩色文本的 ANSI 代碼提取正則運算式中包含的所有大寫單詞?
例子:
s1 = ' Elapsed: 0:00:59.694 - Elapsed/GB: 0:00:00.125 - Result: \x1b[92mPASS\x1b[0m\r\n'
我的失敗:
re.findall(r'- Result: [^\x1b[92m\x1b[0m\r\n]', s1)
re.findall(r'- Result: ([A-Z] )', s1)
預期的:
PASS
uj5u.com熱心網友回復:
嘗試這個:
re.findall("\x1b\\[.*?m([A-Z0-9] ?)\x1b\\[", a)
所以,首先,如果它是行中唯一有顏色的東西,那么,從 ANSI 代碼本身開始。認為我沒有在模式前面加上r,并讓 Python 預處理字串 -在將字串傳遞給正則運算式引擎之前\應用's :這確保作為字符的 unicode 代碼點傳遞。此外,“[”之前的雙斜杠表示它是文字。\x1b<ESC>
第二件事是修復正則運算式中的“m”,因為它是實際更改顏色屬性的命令,無需設定任何特定顏色。
最后但并非最不重要[ ]的一點是,在另一個 ANSI 屬性命令之前,使用正則運算式字符范圍來表示我只想要一個帶有大寫字母(和數字)的單詞。
In [265]: a = s1 = ' Elapsed: 0:00:59.694 - Elapsed/GB:
In [266]: re.findall("\x1b\\[.*?m([A-Z0-9] ?)\x1b\\[", a)
Out[266]: ['PASS']
uj5u.com熱心網友回復:
如果您事先知道要避免的字符是什么,則可以使用以下內容:
import re
s1 = ' Elapsed: 0:00:59.694 - Elapsed/GB: 0:00:00.125 - Result: \x1b[92mPASS\x1b[0m\r\n'
result = re.findall('- Result: \x1b\[92m(. )\x1b\[0m', s1)
print(result)
這列印:
['PASS']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445144.html
上一篇:使用模而不是兩個回圈
下一篇:正則運算式在特定塊內匹配
