You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式分割含固定1/2/4字节、可变第三字节的前导码字节串

解决Python字节串按特定可变前导码分割的问题

你的问题出在正则表达式的写法上:\d{2}是匹配两个ASCII数字字符(比如字节b'12'),但你要匹配的是单个可变字节(比如\x12、\x66这种十六进制表示的单字节值),这完全是两回事。

正确的正则模式

要匹配「\xde\x00开头,第三字节任意,第四字节\x74」的前导码,应该用[\x00-\xff]来表示任意单个字节(覆盖所有可能的8位字节值),完整代码示例如下:

import re

string = b'\xde\x00\x12\x74hbcoawnxasnokcasnlawnmclkasmlfmapodmaw\xde\x00\x66\x74dawnioxhawondajncoianoineaopcmaopscamp\xde\x00\x98\x74dawxaskaodjopawnxkpancokaenjocnaocnawo'
# 正确模式:固定前两字节 + 任意单字节 + 固定最后一字节
string_split = re.split(rb'\xde\x00[\x00-\xff]\x74', string)
print(string_split)

运行后会得到分割结果:

[b'', b'hbcoawnxasnokcasnlawnmclkasmlfmapodmaw', b'dawnioxhawondajncoianoineaopcmaopscamp', b'dawxaskaodjopawnxkpancokaenjocnaocnawo']

第一个空字符串是因为原字节串开头就匹配到了前导码,这是re.split的正常行为。

可选:保留分隔符

如果需要把分割用的前导码也保留在结果里,可以给正则模式加上捕获组:

string_split_with_sep = re.split(rb'(\xde\x00[\x00-\xff]\x74)', string)
print(string_split_with_sep)

结果会变成:

[b'', b'\xde\x00\x12t', b'hbcoawnxasnokcasnlawnmclkasmlfmapodmaw', b'\xde\x00ft', b'dawnioxhawondajncoianoineaopcmaopscamp', b'\xde\x00\x98t', b'dawxaskaodjopawnxkpancokaenjocnaocnawo']

补充说明

如果你的第三字节不是完全任意,而是有特定范围(比如只匹配0x10到0x9F之间的字节),可以把[\x00-\xff]换成对应的范围,比如[\x10-\x9F]。

内容的提问来源于stack exchange,提问作者SALAVOZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:05:34