突出显示字符串中的一些字节

时间:2017-07-20 13:51:19

标签: python string hex

我有一个如下列表:

  

\ 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并以高亮样式打印它。 (例如红色)。我怎么能这样做?

1 个答案:

答案 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

如果我在控制台上使用您的字符串运行此代码,我会得到:

enter image description here

现在这当然不是很方便。所以你可以使用:

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部分。