Поиск шаблона в двоичном файле? - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть две функции:

def make_regex_from_hex_sign(hex_sign):
    regex_hex_sign = re.compile(hex_sign.decode('hex'))
    return regex_hex_sign

def find_regex_pattern_and_return_its_offset(regex_pattern, bytes_array):
    if found_regex_pattern in regex_pattern.finditer(bytes_array):
        return found_regex_pattern.start()
    else:
        return 0

и я использую их так:

pattern = make_regex_from_hex_sign("634351535F")
file = open('somefile.bin', 'rb')
allbytes = file.read()
offset = find_regex_pattern_and_return_its_offset(pattern, allbytes)

Питон бросает: NameError: global name 'found_regex_pattern' is not defined

Если я заменим if на for в if found_regex_pattern in regex_pattern.finditer(bytes_array), это сработает, но затем мне нужно break в конце, чтобы он не смог выполнить поиск после первой итерации найденного шаблона. Есть ли более элегантный способ решить эту проблему без использования for и break?

1 Ответ

0 голосов
/ 10 ноября 2018

Вы не определили found_regex_pattern. Когда вы делаете переход с if на for, он работает, потому что имеет правильный синтаксис, и это означает, что found_regex_pattern действует как запись итерируемого regex_pattern.finditer (bytes_array).

...