2

私は、EDIFACTUNコードリストからさまざまな情報を抽出する正規表現を書いています。何万ものコードがあるので、それらをすべて入力したくないので、正規表現を使用してテキストファイルを解析し、必要なビットを抽出することにしました。テキストファイルは、必要なビットを簡単に識別できるように構成されています。

Regex Heroを使用して次の正規表現を作成しましたが、 codeCommentグループの2つの改行まですべてを一致させることができません。文字クラス[^\n \ n]を使用してみましたが、それでも二重改行とは一致しません。

注: RegexHeroで[マルチライン]オプションを選択しました。

(?<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]


        説明:ドキュメントの行に関連付けられたアクションを示すコード 。

    担当者:an..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

キャラクタークラスでは、どれだけ頻繁に書いても、すべてのキャラクターが1回カウントされます。したがって、文字クラスを使用して連続する改行をチェックすることはできません。ただし、先読みアサーションを使用できます。

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

(?s)シングルラインモードをオンにします(ドットを改行と一致させるため)。

(?!\n\n)現在の位置に2つの連続した改行がないことを表明します。

于 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 に答える