任何人都可以建议匹配4行连续文本的正则表达式模式?

时间:2011-08-04 15:34:04

标签: regex search pattern-matching data-processing

我正在尝试解析一个大型数据文件。在该文件中,有一组由空行分隔的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 个答案:

答案 0 :(得分:1)

不是很漂亮,但这应该有效:

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

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

基本上,您正在寻找一个或多个非换行字符,然后是新行,一个或多个非换行字符,然后是新行等。

编辑:修正了我的正则表达式,它匹配超过4行的块。我为另一行文字添加了一个否定的预测。

答案 1 :(得分:1)

我没有测试过,但这应该适用于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 = "";
    }
}

答案 2 :(得分:0)

你可以解决换行符 - 伪代码示例:

\n\n 1-or-more-characters \n 1-or-more-characters \n 1-or-more-characters \n 1-or-more-characters \n\n

答案 3 :(得分:0)

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

这将捕获1行,2行和3行。

这是贪婪的比赛。

如果您需要3或4行,则可以使用:

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

或者您可以使用:

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

我已经在https://regex101.com/

中对其进行了测试