正则表达式查找并移除行尾内容重复的连续行(前10字符不同)
匹配前10字符不同但行尾内容一致的连续行
需求说明
要编写正则表达式定位满足以下条件的连续行:
- 后一行从第11位到行尾的内容,和前一行完全相同
- 两行的前10个字符不一样
举个例子:
[11:12:21] Hello this is Tom. How are you? [11:14:08] Hello this is Tom. How are you?
这两行的时间(前10字符)不同,但后续内容完全一致,就是要找的目标行。
已掌握的正则技巧
你已经会这两个正则用法:
- 移除每行前11个字符:
FIND: ^.{11}(.*)$ REPLACE: $1
- 移除前10个字符相同的重复行:
FIND: ^((.{10}).*)(?:\r?\n\2.*)+ REPLACE: $1
解决方案正则
要匹配前10字符不同但行尾内容相同的连续两行,用这个正则:
^(.{10})(.*)(?:\r?\n)(?!\1).{10}\2$
正则拆解:
^(.{10}):捕获第一行的前10个字符存入分组1(.*):捕获第一行第11位到结尾的内容存入分组2(?:\r?\n):匹配换行符(兼容Windows的\r\n和Unix的\n格式)(?!\1):负向预查,确保下一行的前10个字符和分组1内容不同.{10}:匹配第二行的前10个字符(仅确认长度,无需捕获)\2:要求第二行第11位到结尾的内容,和分组2的内容完全一致
如果要匹配3行及以上连续满足条件的行(每行前10位都不同,但行尾内容一致),可以用这个扩展版:
^(.{10})(.*)(?:\r?\n)(?!\1).{10}\2(?:\r?\n)(?!\1|.{10})\2$
内容的提问来源于stack exchange,提问作者Sean O - LitSupTipofNite
相关产品推荐
相关产品推荐

