re.sub заменить шестнадцатеричный на строку - PullRequest
0 голосов
/ 02 июня 2018

У меня есть файл, который содержит шестнадцатеричные числа, которые я хочу преобразовать в строки:

'\x73\x63\x6f\x72\x65\x73': '\x4c\x6f\x72\x65\x6d\x20\x69\x70\x73\x75\x6d',
'Status', ['\x75\x70\x64\x61\x74\x65']  

Но при использовании re.sub для замены каждого вхождения шестнадцатеричного экранированного числа его представлением ascii, он неКажется, я не нашел шестнадцатеричное число.
Я пытался использовать необработанные строки, но это ничего не изменило.Я до сих пор не могу заменить их.

import re, binascii
with open('hex.txt', 'r') as f:
    file = f.read()
    hexList = re.findall(r"'([\\x\w+]*)'", file)

    for item in hexList:
        file = re.sub(r"('{}')".format(item), str(binascii.unhexlify(item.replace('\\x', ''))), file)
        #file = re.sub("('"+item+"')".format(item), str(binascii.unhexlify(item.replace('\\x', ''))), file)
    print(file)```

1 Ответ

0 голосов
/ 02 июня 2018

Вы можете использовать следующий фрагмент кода

import re, binascii
with open('hex.txt', 'r') as f:
    file = f.read()
    hexList = re.findall(r'((?:\\x[0-9a-f][0-9a-f])+)', file)

    for item in hexList:
        file = re.sub(r"('{}')".format(item.replace('\\', '\\\\')), str(binascii.unhexlify(item.replace('\\x', ''))), file)
    print(file)

Регулярное выражение, используемое вами для поиска шестнадцатеричных строк, неверно, поскольку оно даже находит Status в качестве шестнадцатеричной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...