Python字符串处理:为未带\x的十六进制字节前置\x
解决Python字符串十六进制字节自动补全\x前缀的问题
我来帮你搞定这个字符串处理的需求!你的目标是给每个未带\x前缀的十六进制字节(两个字符一组)加上\x,同时保留已经带有前缀的部分,正则确实是最简洁高效的方案之一,之前没成功大概率是正则模式的细节没处理对,下面是具体的实现方法:
代码实现
import re # 原始字符串 mystr = r"30336237613131\x90\x01\x0A\x90\x02\x146F6D6D616E64\x90\x01\x06\x90\x02\x0F52656C6174\x90\x01\x02\x90\x02\x50656D31\x90\x00" # 正则匹配规则:匹配前面没有\x的两个十六进制字符 pattern = r'(?<!\\x)([0-9a-fA-F]{2})' # 替换为\x加上匹配到的两个字符 result = re.sub(pattern, r'\\x\1', mystr) print(result)
正则规则解释
(?<!\\x):这是负向零宽断言,用来确保当前要匹配的两个字符前面没有\x(因为是raw字符串,所以用\\x表示实际的\x),这样就不会修改已经带前缀的字节。([0-9a-fA-F]{2}):匹配任意两个十六进制字符(大小写都支持),并用括号捕获为分组,方便后续替换。r'\\x\1':替换时,把捕获到的分组内容(即两个十六进制字符)前面加上\x,同样用raw字符串避免转义问题。
输出结果
运行代码后,你会得到期望的字符串:
\x30\x33\x62\x37\x61\x31\x31\x90\x01\x0A\x90\x02\x14\x6F\x6D\x6D\x61\x6E\x64\x90\x01\x06\x90\x02\x0F\x52\x65\x6C\x61\x74\x90\x01\x02\x90\x02\x50\x65\x6D\x31\x90\x00
这个方案既简洁又能准确处理你的需求,不需要手动遍历字符串做判断,效率也很高。
内容的提问来源于stack exchange,提问作者api pota
相关产品推荐
相关产品推荐

