我有一个如下列表:
\ XEB \ X1F \ x5e \ X31 \ XDB \ X88 \ x5e \ X07 \ X89 \ X76 \ X08 \ X89 \ x5e \ X0C \ x8d \ X1E \ x8d \ x4e \ X08 \ x8d \ X56 \ X0C \ X31 \ XC0 \ XB8 \ X0B \ X00 \ X00 \ X00 \ XCD \ X80 \ X31 \ XF6 \ xe8 \ XDC \ XFF \ XFF \ XFF \ X2F \ X62 \ X69 \ x6e \ X2F \ X73 \ X68 \ X41 \ X42 \ X42 \ X42 \ X42 \ X43 \ X43 \ X43 \ X43
我想在字符串中找到\x00
和\xcd\x80
并以高亮样式打印它。 (例如红色)。我怎么能这样做?
答案 0 :(得分:2)
如果字符串s
未转义(\
是真实的,字符),您可以使用:
print(s.replace(r'\x00','\x1b[31m\\x00\x1b[0m') \
.replace(r'\xcd\x80','\x1b[31m\\xcd\\x80\x1b[0m'))
我们在这里做的是查找原始字符串r'\x00'
并将其替换为'\x1b[31m\\\x00\x1b[0m'
。这意味着我们将其添加到'\x1b[31m'
,ANSI terminal escape code for red foreground,并将其附加到'\x1b[0m'
,ANSI terminal escape code for dropping markup。
如果我在控制台上使用您的字符串运行此代码,我会得到:
现在这当然不是很方便。所以你可以使用:
def print_highlight(s,markers=(r'\x00',r'\xcd\x80')):
for marker in markers:
s = s.replace(marker,'\x1b[31m%s\x1b[0m'%marker)
print(s)
所以现在你可以给它一个字符串s
,以及你想要突出显示的字符串片段列表。例如:
print_highlight(string,(r'\x31',))
将突出显示所有\x31
部分。