Python如何从文本文件提取起始为45 3F后接的指定十六进制内容
问题原因分析
- 正则规则不支持小写十六进制:原正则
[0-9A-F]仅匹配大写A-F的十六进制字符,若输入文件中存在小写a-f的十六进制内容,会直接匹配失败。 - 缺少指定后缀匹配:需求明确要求匹配内容末尾固定为
00 00,原正则没有加入该限定,也不符合输入文件的实际结构。 - 遗漏依赖导入:原代码未导入
re模块,运行时会直接报错,也会导致无法得到匹配结果。 - 未指定文件编码:不同操作系统默认文件读写编码不一致,可能出现文件读取乱码,导致正则匹配失败。
修正后代码
import re # 读取文件时显式指定编码,避免乱码 with open('file.txt', 'r', encoding='utf-8') as reader: my_data = reader.read() # 正则同时支持大小写十六进制匹配,且添加末尾00 00的限定 matches = re.findall(r"45 3F ([0-9A-Fa-f]{2} [0-9A-Fa-f]{2} [0-9A-Fa-f]{2}) 00 00", my_data) # 也可以使用忽略大小写的flag简化正则写法: # matches = re.findall(r"45 3F ([0-9A-F]{2} [0-9A-F]{2} [0-9A-F]{2}) 00 00", my_data, flags=re.IGNORECASE) data_to_write = " ".join(matches) with open('out.txt', 'w', encoding='utf-8') as writer: writer.write(data_to_write)
使用你提供的示例输入运行上述代码,输出文件内容将完全符合预期。
内容的提问来源于stack exchange,提问作者user6782081
相关产品推荐
相关产品推荐

