提取 ANSI 彩色文本中包含的所有大写单词
Extract all caps word contained in ANSI colored text
如何在终端中使用 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
如果你事先知道要避免的字符是什么,你可以使用以下方法:
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']
试试这个:
re.findall("\x1b\[.*?m([A-Z0-9]+?)\x1b\[", a)
所以,首先,如果它是该行中唯一的颜色,那么,从 ANSI 代码本身开始。
意识到我没有在模式前加上 r
前缀,让 Python pre-treat 字符串 - 在 之前应用 \
的 将字符串传递给正则表达式引擎:这确保 \x1b
作为 <ESC>
字符的 unicode 代码点传递。此外,“[”之前的双斜杠表示它是文字。
第二件事是修复正则表达式中的“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']
如何在终端中使用 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
如果你事先知道要避免的字符是什么,你可以使用以下方法:
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']
试试这个:
re.findall("\x1b\[.*?m([A-Z0-9]+?)\x1b\[", a)
所以,首先,如果它是该行中唯一的颜色,那么,从 ANSI 代码本身开始。
意识到我没有在模式前加上 r
前缀,让 Python pre-treat 字符串 - 在 之前应用 \
的 将字符串传递给正则表达式引擎:这确保 \x1b
作为 <ESC>
字符的 unicode 代码点传递。此外,“[”之前的双斜杠表示它是文字。
第二件事是修复正则表达式中的“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']