re.sub用字符串替换十六进制

时间:2018-06-02 16:07:33

标签: python regex python-3.x hex

我有一个包含我要转换为字符串的十六进制数字的文件:

const initialState = {
  incomingRequests: [] // Initialized with data from API call,
  acceptedRequests: [] // Stores IDs of requests accepted by an agent
  rejectedRequests: [] // Stores IDs of request rejected by an agent
  completedRequests: [] // Stores IDs of requests completed by an agent
}
const chatRequestsReducer = (state=initialState, action) {
  // Returns new state based on action type
}

但是当使用re.sub通过其ascii表示替换每个出现的十六进制转义数字时,它似乎不会首先找到十六进制数字。
我尝试过使用原始字符串,但它并没有改变任何东西。我仍然无法取代它们。

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

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码片段

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作为十六进制字符串。