Оставить только строки в определенном теге

Есть многострочный текст вида:

произвольный текст
<тег>строка_1</тег>
произвольный текст
<тег>строка_2</тег>
...................
<тег>строка_N</тег>
произвольный текст

Количество строк не определено. Задача: в Notepad++ сделать замену таким образом, чтобы на выходе оставались только строки в теге:

<тег>строка_1</тег>
<тег>строка_2</тег>
...................
<тег>строка_N</тег>

Наиболее рабочим оказался вариант [\s\S]*?(<тег>.*?</тег>)[\s\S]*?, но он оставляет "хвост" в виде текста, который был после последней строки с тегом.

Спасибо и не стреляйте в пианиста...))


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте

Найти:       ^(?!<тег>.*</тег>$).*\R?
Заменить: <пусто>

Подробности

  • ^ - начало строки
  • (?!<тег>.*</тег>$) - отрицательный блок просмотра вперёд, строка не должна начинаться с <тег> и заканчиваться </тег>
  • .* - ноль и более любых символов, отличных от переноса строки, как можно больше (целая строка)
  • \R? - опциональная любая последовательность переноса строки.

См. настройки и пример работы выражения:

введите сюда описание изображения

→ Ссылка