Поиск случайного документа "заголовки" между новыми строками в большом документе - PullRequest
0 голосов
/ 20 марта 2019

Как мне подсчитать случайный «заголовок» в большом (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

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

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

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

Проверьте это демо

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

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

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

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

Также, проверено в Блокноте ++ 7.6.1

enter image description here

0 голосов
/ 21 марта 2019
$ awk -v RS= -F'\n' 'NF==1{c++} END{print c+0}' file
4

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

...