Вы можете использовать регулярное выражение
^(.+)\r?\n(?=(?:.*\r?\n){3}(.+))
Демонстрация PCRE
Для приведенного примера есть четыре соответствия: 45op0
, tr ico
, JJB Be
и tyuh
. Каждый матч имеет две группы захвата. Первая группа захвата содержит само совпадение. Для первого совпадения (45op0
) группа захвата 2 содержит 113-4997
, что фиксируется в положительном прогнозе. Затем содержимое двух групп захвата можно объединить, разделив их точкой с запятой, чтобы получить 45op0;113-4997
Аналогично, для второй группы захвата совпадений 2 содержит 202076
и т. Д.
Когда строка 113-4997
достигнута, она сохраняется в cap grp 1, следующие три строки используются, а затем выполняется регулярное выражение, потому что за непустой строкой нет следующей. В следующих строках регулярное выражение не выполняется, поскольку оно не может пропустить три строки.
Модуль регулярных выражений PCRE выполняет следующие операции.
^(.+) match a line with 1+ chars, excl. line terminators,
in cap grp 1
\r?\n match the newline and possible carriage return
(?= begin a positive lookahead
(?:.*\r?\n) match an entire line in a non-cap group
{3} execute the non-cap group 3 times (skip 3 lines)
(.+) match a line with 1+ chars, excl. line terminators,
in cap grp 2
) end positive lookahead