如何使用带例外规则的正则表达式删除匹配行,仅保留指定index编号的img行
问题根源
你写的正则出现错误的核心原因是负向先行断言没有设置第一个数字段的结束边界:原(?!2|1)仅校验index-后的第一个字符是否为1/2,只要首字符符合就不会匹配该行,因此22、100这类首字符为1/2的多位数行都会被错误保留。
修正后的正则
^<img src="index-(?!(?:1|2)_)\d+_\d+\.(?:jpg|png)"\/><br>$
修改说明
仅调整了原有正则的负向先行断言规则,新增_作为第一个数字段的结束边界,调整后仅当index-后紧跟的完整数字段恰好是1或2时,才会被排除在匹配范围之外(即不会被删除),其余所有第一个数字不是1/2的行都会被该正则匹配到,直接删除所有匹配结果即可满足需求。
如果你的文件中目标行的行首/行尾存在空白字符(空格、制表符等),可以使用兼容版本:
^\s*<img src="index-(?!(?:1|2)_)\d+_\d+\.(?:jpg|png)"\/><br>\s*$
扩展使用方法
如果后续需要保留其他数值的行,例如要保留第一个数字为3、7、15的行,仅修改负向先行断言内的匹配规则即可:
^<img src="index-(?!(?:3|7|15)_)\d+_\d+\.(?:jpg|png)"\/><br>$
内容的提问来源于stack exchange,提问作者None
相关产品推荐
相关产品推荐

