Поиск случайных «заголовков» документов между новыми строками в большом документе

Как я могу подсчитать случайный «заголовок» в большом (700 МБ) и «неформатированном» текстовом файле?

«Заголовок» всегда в таком формате: \n + random title + \n. Однако несколько \n могут появляться последовательно.

Я ищу решение, которое использует Notepad ++ или любой другой редактор, просто для подсчета числа результатов (например, с использованием выражения регулярного выражения) или код sed для извлечения этих заголовков или любое другое решение в любом языковом коде (т.е. , Python, PHP и т. д.)!

Пример:


This is a random Title

Text Text Text Text Text
Text Text Text Text Text

This is a another random Title

Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text




This is a another another random Title

Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text


This is a another another another random Title

Text Text Text Text Text
Text Text Text Text Text
Text Text Text Text Text

окончание строки windows или linux?

kuh-chan 20.03.2019 21:01

Линукс конечные строки

zppinto 20.03.2019 21:01
grep '^Title$. Это было легко
miken32 20.03.2019 21:02

@ miken32 Имя «Заголовок» просто и показательно, как оно показано в документе. У него нет тега «Название». Я обновил свой ответ, чтобы быть более ясным.

zppinto 20.03.2019 21:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать это регулярное выражение для сопоставления или подсчета количества заголовков в соответствии с вашим текстом, в соответствии с которым за заголовком будут следовать две новые строки и предшествовать как минимум две новые строки.

(?:\r?\n\r?\n|\A\r?\n?)[^\r\n]+(\r?\n){2}

Проверьте эту демонстрацию

Я включил \r по желанию, чтобы он работал как для Windows, так и для Linux, но если ваши окончания строк относятся только к Linux, вы можете удалить \r из него.

Кроме того, если вы хотите сопоставлять и извлекать только заголовки, вы можете использовать группировку для захвата заголовка или использовать поиск, чтобы просто сопоставить заголовок. Вот групповая версия регулярного выражения, которая фиксирует заголовок в группе1,

(?:\r?\n\r?\n|\A\r?\n?)([^\r\n]+)(\r?\n){2}

Демонстрация соответствия заголовка в группе1

Также проверено в Notepad++ 7.6.1

$ awk -v RS= -F'\n' 'NF==1{c++} END{print c+0}' file
4

Вышеупомянутое просто печатает количество раз, когда у вас есть одна непустая строка между любым количеством пустых строк.

Другие вопросы по теме