在带有通配符的 bytearray 中查找 bytearray

sno*_*h09 2 python binary bytearray

我有一些大型二进制文件,我需要在其中搜索特定的字节序列,例如:

find_bytes = bytearray(base64.b16decode('a226fb42'))
with open(filename, "rb") as f:
    file_bytes = bytearray(f.read())
    found_pos = file_bytes.find(find_bytes, 0)
Run Code Online (Sandbox Code Playgroud)

这非常有效,除了现在我希望能够将序列中的特定字节值(例如 00 或 FF)表示为将匹配任何字节的通配符,因此例如应该匹配以 开头和结尾a2000042的任何 4 字节序列。a242

有没有办法扩展find方法来做到这一点,或者更好的解决方案?

使用 Python 2.7 但愿意在必要时切换..

ise*_*dev 5

您可以使用正则表达式(它们适用于字节数组):

>>> import re
>>> bytes = bytearray('\x01\x02\x03\x04\x05')
>>> re.search(b'\x02.\x04',bytes).group(0)
'\x02\x03\x04'
Run Code Online (Sandbox Code Playgroud)

只需使用“.” 作为通配符。

但可能会在非常大的文件上引起问题,因为需要首先将整个文件加载到字符串中。