Notepad++正则表达式:移除含$GNTXT且以S*12结尾的子串
解决思路
你之前用的正则(.*)GNTXT(.*)会匹配所有包含GNTXT的行,根源是.*的贪婪匹配特性会吞掉整行内容。要精准定位并移除包含$GNTXT且以S*12结尾的目标字符串,需要调整正则逻辑:
- 转义正则特殊字符:
$和*在正则中有特殊含义,要分别写成\$和\* - 使用非贪婪匹配:用
.*?替代.*,确保匹配到第一个S*12就停止,不会过度匹配后续内容
最终的正则表达式应为:\$GNTXT.*?S\*12
实际操作示例
用sed工具处理(适合快速批量操作)
处理二进制文件时需加-b参数避免乱码:
sed -b 's/\$GNTXT.*?S\*12//g' input.file > output.file
如果目标字符串跨行,可添加-z参数开启跨行匹配:
sed -zb 's/\$GNTXT.*?S\*12//g' input.file > output.file
用Python处理(更稳妥,避免二进制数据损坏)
通过二进制读写模式操作,同时支持跨行匹配:
import re # 编译正则,re.DOTALL让.匹配换行符,支持跨行匹配 pattern = re.compile(rb'\$GNTXT.*?S\*12', re.DOTALL) with open('input.file', 'rb') as f_in, open('output.file', 'wb') as f_out: content = f_in.read() cleaned_content = pattern.sub(b'', content) f_out.write(cleaned_content)
关键注意事项
- 处理二进制文件必须用二进制模式读写,否则会因编码转换损坏文件内容
- 非贪婪模式
.*?是精准匹配的核心,能避免误删目标字符串之外的内容 - 若目标字符串存在跨行情况,必须开启跨行匹配模式,否则会匹配失败
内容的提问来源于stack exchange,提问作者user14708750
相关产品推荐
相关产品推荐

