【发布时间】:2013-12-19 03:04:31
【问题描述】:
我正在使用以下正则表达式模式在二进制文件中搜索 0xDEAD4FAD:
my_pattern = re.compile(b"\xDE\xAD\x4F\xAD")
但是如何概括搜索 0xDEAD4xxx 的搜索模式?好像不能切过半个字节
【问题讨论】:
-
当您第一次搜索的字节之一是正则表达式元字符时,您会感到头疼。
标签: python regex binaryfiles
我正在使用以下正则表达式模式在二进制文件中搜索 0xDEAD4FAD:
my_pattern = re.compile(b"\xDE\xAD\x4F\xAD")
但是如何概括搜索 0xDEAD4xxx 的搜索模式?好像不能切过半个字节
【问题讨论】:
标签: python regex binaryfiles
正则表达式确实允许搜索范围。因此,要找到第一个半字节为“4”的字节,请使用:
pattern = re.compile(b"[\x40-\x4F]")
以下测试表明它产生了所需的输出:
>>> for byte in ('\x3f', '\x40', '\x42', '\x4f', '\x50'): print bool(pattern.search(byte))
...
False
True
True
True
False
要回答有关搜索 0xDEAD4xxx 的具体问题,请使用:
my_pattern = re.compile(b"\xDE\xAD[\x40-\x4F].")
【讨论】:
byte=b'\x3c',那么作为整数,低半字节是ord(byte) & ord(b'\x0f'),高半字节是(ord(byte) & ord(b'\xf0')) / 16
我怀疑最好将二进制字符串转换为 ASCII 十六进制字符串,然后将正则表达式应用于该字符串。我不相信正则表达式旨在处理二进制数据。你也许可以让它发挥作用,但如果一路上有惊喜,请不要感到惊讶。
【讨论】:
如果我遇到你的情况,我会尝试使用 grep 进行 hexdump。
【讨论】: