2

我正在编写一个正则表达式,它将从 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]*)

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

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

  • 1073 文档行动作代码 [B]


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

    代表:一个..3

    1 包含在单据/交易
        中 单据行包含在
        单据/交易中。
        也应该捕捉到这一点。

    2 从单据/交易
        中排除 单据行 从单据/交易中排除
        。

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

The document line is included in the
          document/transaction.
          should capture this as well.

但它只提取第一行:

The document line is included in the
4

3 回答 3

5

在一个字符类中,每个字符都算一次,无论你写它的频率如何。所以一个字符类不能用于检查连续的换行符。但是您可以使用前瞻断言:

^\s{14}(?<codeComment>(?s)(?:(?!\n\n).)*)

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

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

于 2012-10-25T09:31:22.297 回答
2

尝试

    [\r\n]{2,}

“匹配双换行符”

在 DWR 中用于删除双重/臃肿的换行符(由于某种原因从解压缩文件中遗留下来)

更多信息: 如何删除解压缩后出现在 PHP/CSS/JS 文件中的不需要的“额外换行符”?

于 2019-06-13T03:52:50.770 回答
0

这个很简单,最适合我:

/[\r]?\n[\r]?\n/g
于 2020-04-18T18:25:28.160 回答