Python字符串切片:读取文件指定子串后按十六进制值截取内容
解决方案:提取文件中ASDF后的指定长度子串
我来给你提供一个实用的Python实现方案,完美匹配你描述的需求——从文件里定位ASDF标记,读取其后两位十六进制字符作为长度值,再截取对应长度的子串。
核心思路
用正则表达式精准匹配ASDF后的格式:
- 匹配
ASDF(根据示例是带空格的ASDF,可按需调整) - 捕获后续2个十六进制字符(覆盖0-9、A-F/a-f的大小写情况)
- 将捕获的十六进制值转为十进制整数
x,再提取后续x个字符
代码实现
import re def extract_asdf_substrings(file_path): # 读取目标文件的全部内容 with open(file_path, 'r') as f: content = f.read() # 正则匹配模式:匹配ASDF + 空格 + 2位十六进制字符,再捕获后续所有字符(用于截取x长度) pattern = re.compile(r'ASDF ([0-9A-Fa-f]{2})(.*?)') results = [] # 遍历所有匹配到的ASDF实例 for match in pattern.finditer(content): hex_length_str = match.group(1) # 把十六进制字符串转成十进制整数x x = int(hex_length_str, 16) # 从后续字符中截取前x个 target_substring = match.group(2)[:x] results.append({ 'hex_length': hex_length_str, 'decimal_x': x, 'extracted_substring': target_substring }) return results # 测试调用(替换成你的文件路径即可) if __name__ == '__main__': file_path = 'your_target_file.txt' extracted_data = extract_asdf_substrings(file_path) for idx, item in enumerate(extracted_data, 1): print(f"第{idx}个匹配结果:") print(f" 十六进制长度标记:{item['hex_length']}") print(f" 转换后的x值:{item['decimal_x']}") print(f" 提取的子串:{item['extracted_substring']}\n")
针对你给出的示例文件的输出
假设你的文件内容是:
1390145993 ASDF 06452048091938HFDJGK3985719 ASDF 031395829382235235235235235235DHFGAJDGF ASDF 103235923785907230646246246346734735746845698
运行代码后会得到:
第1个匹配结果: 十六进制长度标记:06 转换后的x值:6 提取的子串:452048 第2个匹配结果: 十六进制长度标记:03 转换后的x值:3 提取的子串:139 第3个匹配结果: 十六进制长度标记:10 转换后的x值:16 提取的子串:3235923785907230
额外说明
- 如果
ASDF后面的字符不足2位,或者后续字符长度小于x,代码会自动截取现有内容;如果需要严格校验(比如报错提示),可以在代码里加判断逻辑 - 正则里的空格要和文件中
ASDF后的分隔符一致,如果是其他分隔符(比如无空格、制表符),直接调整pattern里的空格部分即可 - 十六进制字符不区分大小写,代码已经兼容
A-F和a-f两种情况
内容的提问来源于stack exchange,提问作者mnb1414
相关产品推荐
相关产品推荐

