Кто-нибудь может предложить шаблон регулярного выражения, который соответствует 4 последовательным строкам текста? - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь проанализировать большой файл данных.В файле есть группы из 3 или 4 строк данных, разделенных пустой строкой.Например:

Data Group One Name
Data Group One Datum 1
Data Group One Datum 2
Data Group One Datum 3

Data Group Two Name
Data Group Two Datum 1
Data Group Two Datum 2

Data Group Three Name
Data Group Three Datum 1
Data Group Three Datum 2
Data Group Three Datum 3

Я ищу быстрый способ извлечь все группы данных, которые имеют 4 строки (игнорируя все группы из 3 строк).Есть ли способ с помощью регулярных выражений найти все группы из 4 строк в текстовом файле?Или любые другие предложенные (возможно, что-то, использующие awk или sed) методы для этого?

Ответы [ 4 ]

1 голос
/ 04 августа 2011

Я не проверял это, но это должно работать для сценария awk:

#!/bin/awk -f
BEGIN {
        count = 0;
        lines = "";
}
{    
    if ($0 != "") {
        lines = lines \n $0;
        count++;
    } else if (count == 4) {
        print lines;       
    }
    if ($0 == "") {
        count = 0;
        lines = "";
    }
}
1 голос
/ 04 августа 2011

Не очень красиво, но это должно сработать:

/[^\n]+\n[^\n]+\n[^\n]+\n[^\n]+(?!(?:\n[^\n]+))/

или

/(?:[^\n]+\n){3}[^\n]+(?!(?:\n[^\n]+))/

По сути, вы ищете одинили несколько символов, не являющихся новой строкой, затем новая строка, один или несколько символов, не являющихся символом новой строки, затем новая строка и т. д.

РЕДАКТИРОВАТЬ: исправлено мое регулярное выражение, оно соответствовало блокам, превышающим4 строки.Я добавил отрицательный взгляд на другую строку текста.

0 голосов
/ 11 декабря 2018
(?:.+\n){1,3}

это захватит 1 строку, 2 строки и 3 строки.

это жадные совпадения.

если вам нужно 3 или 4 строки, вы можете использовать:

(?:.+\n){3,4}

или вы можете использовать:

(?:[^\n]+\n){3,4}

Я проверил это в https://regex101.com/

0 голосов
/ 04 августа 2011

Вы можете работать с символами разрыва строки - пример псевдокода:

\n\n 1-or-more-characters \n 1-or-more-characters \n 1-or-more-characters \n 1-or-more-characters \n\n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...