如何用正则删除#/开头且以E结尾行后对应的NOP行
正则解决方案
前置配置
先在你的文本编辑器中开启两个配置项:
- 开启正则**多行匹配(Multiline)**模式
- 开启「
.匹配换行符」选项(Editpad/Textpad/PSPad均支持该配置,部分编辑器也叫「点号匹配所有字符」)
查找正则
(^.*#\/.*E\r?\n)(?:AT.*\r?\n)?\s*NOP\r?\n
各部分逻辑说明:
(^.*#\/.*E\r?\n):第一捕获组匹配你已经验证过的目标行:包含#/且整行以E结尾,同时兼容Windows/macOS不同格式的行尾换行符(?:AT.*\r?\n)?:非捕获可选组,匹配可能存在的、以AT开头的中间时间配置行,?标识该组可以存在也可以不存在,正好覆盖你说的两种场景:- 没有AT中间行时,直接匹配后续NOP行
- 存在AT中间行时,先匹配AT行再匹配后续NOP行
\s*NOP\r?\n:匹配NOP行,\s*兼容行首可能存在的空格、制表符,同时匹配NOP行的行尾换行
小提示:如果你的文本中目标行末尾可能存在空格、制表符等不可见字符,可以将正则中目标行匹配部分调整为
^.*#\/.*E\s*\r?\n,避免匹配失败。
替换规则
替换内容填写$1,含义是仅保留第一组匹配到的目标行,后续的AT中间行(如果存在)和NOP行都会被直接删除。
效果验证
对你提供的测试文本执行替换后,4条符合条件的目标行对应的NOP行都会被正确删除,其余不匹配条件的NOP行不会被误删,完全符合需求。
内容的提问来源于stack exchange,提问作者italo_pm
相关产品推荐
相关产品推荐

