使用正则表达式匹配双线换行符

Int*_*pid 2 regex edifact

我正在编写一个正则表达式,它将从EDIFACT UN代码列表中提取各种信息.因为有成千上万的代码我不想全部输入,所以我决定使用正则表达式解析文本文件并提取出我需要的位.文本文件的结构使我能够轻松识别出我想要的位.

我使用Regex Hero创建了以下Regex 来测试它,但是我无法让它匹配codeComment组的双重换行符.我已经尝试使用字符类[^ \n \n],但这仍然不匹配双换行符.

注意:我在Regex Hero上选择了Multiline选项.

(?<element>\d+)\s\s(?<elementName>.*)\[[B|C|I]\]\s+Desc: (?<desc>[^\n]*\s*[^\n]*)
^\s*Repr: (?<type>a(?:n)?)..(?<length>\d+)
^\s*(?<code>\d+)\s*(?<codeName>[^\n]*)
^\s{14}(?<codeComment>[^\n]*)
Run Code Online (Sandbox Code Playgroud)

这是我用来匹配的示例文本.

-------------------------------------------------- --------------------

  • 1073文档行代码[B]

    描述:指示与
        文档行关联的操作的代码 .

    Repr:an..3

    1包含在凭证/交易中
        凭证行包含在
        凭证/交易中.
        也应该抓住这个.

    2从文档/事务
        中排除文档行不包括在
        文档/事务中.

我想要的是codeComment包含以下内容:

The document line is included in the
          document/transaction.
          should capture this as well.
Run Code Online (Sandbox Code Playgroud)

但它只提取第一行:

The document line is included in the
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 5

在一个角色类中,无论你多久写一次,每个角色都算一次.因此,不能使用字符类来检查连续的换行符.但是你可以使用先行断言:

^\s{14}(?<codeComment>(?s)(?:(?!\n\n).)*)
Run Code Online (Sandbox Code Playgroud)

(?s) 打开单线模式(允许点匹配换行符).

(?!\n\n) 断言当前位置没有两个连续的换行符.