python: patrón de búsqueda de expresiones regulares para archivos binarios (medio byte)

Estoy utilizando el siguiente patrón de expresión regular para buscar 0xDEAD4FAD en un archivo binario:

my_pattern = re.compile(b"\xDE\xAD\x4F\xAD") 

pero, ¿cómo generalizo el patrón de búsqueda para buscar 0xDEAD4xxx? Parece que no puede cortar a través de medio byte

Las expresiones regulares permiten la búsqueda en rangos. Por lo tanto, para encontrar un byte cuyo primer nibble sea “4” use:

 pattern = re.compile(b"[\x40-\x4F]") 

La siguiente prueba muestra que produce el resultado deseado:

 >>> for byte in ('\x3f', '\x40', '\x42', '\x4f', '\x50'): print bool(pattern.search(byte)) ... False True True True False 

Para responder a su pregunta específica sobre la búsqueda de 0xDEAD4xxx, use:

 my_pattern = re.compile(b"\xDE\xAD[\x40-\x4F].") 

Sospecho que se te servirá mejor convirtiendo tu cadena binaria en una cadena hexadecimal ASCII, y aplicando tus expresiones regulares a eso. No creo que las expresiones regulares estén destinadas a trabajar con datos binarios; Es posible que puedas hacerlo funcionar, pero no te sorprendas si hay sorpresas en el camino.

Si estuviera en tu situación, probaría hexdump con grep.