如何用Python从Regshot文本文件中剥离十六进制代码
解决Regshot文本清理:移除冒号后的十六进制数据
嘿,你已经完成了大部分工作啦!问题就卡在正则表达式的部分,没法精准去掉冒号后面的十六进制数据对吧?我来帮你补全代码逻辑,完美解决这个问题。
完整修正代码
import re import sys # 从命令行读取输入文件,同时创建清理后的输出文件 with open(sys.argv[1], 'r') as input_file, open('cleaned_reg_entries.txt', 'w') as output_file: # 跳过Regshot文件开头的7行头部信息(你原来的逻辑没问题) for _ in range(7): next(input_file) # 逐行处理内容 for line in input_file: # 先去掉每行首尾的空白字符(换行、空格等) stripped_line = line.strip() # 只处理包含冒号的行(也就是带十六进制数据的项) if ':' in stripped_line: # 用正则移除冒号及其后面所有内容(从冒号到行尾) cleaned_entry = re.sub(r':.*$', '', stripped_line).strip() # 避免写入空行,只有内容不为空时才写入 if cleaned_entry: output_file.write(cleaned_entry + '\n') else: # 处理没有冒号的行(比如移动的注册表项,根据你的需求调整) if stripped_line: output_file.write(stripped_line + '\n')
代码解释
- 文件处理:同时打开输入和输出文件,一次性完成读取和写入,更高效
- 跳过头部:保留了你原来跳过前7行的逻辑,因为Regshot的开头确实有一些无关的头部信息
- 正则匹配:
r':.*$'是核心——它会匹配从冒号:开始到行尾的所有内容,然后替换成空字符串,这样就只留下了冒号前的注册表项路径 - 空行过滤:加入了
strip()和非空判断,避免清理后的文件出现大量空行
更精准的正则(可选)
如果担心有特殊情况(比如注册表项里意外出现冒号,不过这种情况极少),可以用更精准的正则,只匹配冒号后是十六进制数据的部分:
cleaned_entry = re.sub(r':\s*(?:[0-9A-Fa-f]{2}\s*)+$', '', stripped_line).strip()
这个正则会匹配冒号后跟着的、空格分隔的十六进制字符(比如 : 00 1A B3),不会误删其他带冒号的内容。
内容的提问来源于stack exchange,提问作者theworstTM
相关产品推荐
相关产品推荐

