从字符串 python 中提取十六进制数

Extract hex number from string python

我正在尝试从此字符串中提取十六进制数(类型 str):

mystring = b'\r\n+CUSD: 2,"062506460642063706270639002006270644062E062F06450629002006230639062F0020062706440625062A063506270644",72\r\n\r\nOK\r\n'

我试过了:

hexnumber= m = re.findall(r'[0-9a-fA-F]+' , mystring)
print(hexnumber)

输出:

['b', 'C', 'D', '1', '0637064406280020063A064A0631002006450648062C0648062F000A002D0020002D0020002D000A00300030003A0627064406420627062606450629000A0030003A0631062C06480639', '72']

我正在寻找的输出是:

0637064406280020063A064A0631002006450648062C0648062F000A002D0020002D0020002D000A00300030003A0627064406420627062606450629000A0030003A0631062C06480639

你的“string”实际上不是 bytes (b'…') 的字符串,所以你应该根据使用的编码进行解码(我假设是 utf-8在这里)。

然后我还假设你想提取引号之间的字符串,所以我建议使用带环视的正则表达式:

import re
out = re.findall(r'(?<=")[a-fA-F\d]+(?=")', mystring.decode('utf-8'))
if out:
    print(out[0])

# 062506460642063706270639002006270644062E062F06450629002006230639062F0020062706440625062A063506270644

您还可以设置模式中的最少字符数(此处为 8 个或更多):

re.findall(r'[a-fA-F\d]{8,}', mystring.decode('utf-8'))