Как насчет использования второй группы для проверки, например, первых 10 символов:
^((.{10}).*)(?:\r?\n\2.*)+
Где {n}
указываетколичество символов из linestart, которые должны быть проверены на дублирование.
- вся строка записана в
$1
, что также используется в качестве замены - , вторая группа используется для проверкиповторяющаяся строка начинается с
См. эту демонстрацию на regex101
Другая идея - использование lookahead и замените на пустую строку :
^(.{10}).*\r?\n(?=\1)
Эта строка просто отбросит текущую строку, если захваченный $1
будет впереди следующей строки.
Вот демоверсия в regex101
Для удаления также повторяющихся строк, содержащих до 10 символов, идея PCRE с использованием условий: ^(?:(.{10})|(.{0,9}$)).*+\r?\n(?(1)(?=\1)|(?=\2$))
и замените его на пустую строку.
Если ваш регулярный выражение поддерживает притяжательные квантификаторы , используйте .*+
улучшит производительность .
Имейте в виду, что все эти шаблоны (и ваше текущее регулярное выражение) просто нацелены на последовательных повторяющихся строк.