1

次のようなパイプ区切りのデータがあります。

    field|field|field|field|another "field"|field
    field|field|field|"another" field|field|field
    field|"fie|ld"|field|field|field|field

そして、私が抱えている問題は、区切りフィールドに対して二重引用符が適切に形成されていないことです (区切り文字または引用符を含むフィールド自体を二重引用符で囲み、二重引用符を除外する必要があります)別の二重引用符で囲みます) 。出力は次のようになります。

    field|field|field|field|"another ""field"""|field
    field|field|field|"""another"" field"|field|field
    field|"fie|ld"|field|field|field|field

正規表現でこれを行う簡単な方法があるかどうか誰でも知っていますか?

4

1 に答える 1

1

この操作の一部のみが正規表現に適しています。その他の部分は、通常のプログラム フローに適しています。正規表現は依然として操作の不可欠な部分ですが、可能な場合は組み込みの文字列操作を使用してください。

PCRE の使用:

  1. 入力文字列の 1 行を読み取ります。
  2. に一致する行を分割して"[^"]*"(*SKIP)(*F)|\|、フィールドのリストを取得します。
  3. 各フィールドについて:
    1. に一致するものが含まれている場合は(?<!^)"(?!$)、フィールドを引用符で囲みます。
    2. (?<!^)"(?!$)その後、すべての一致をに置き換え""ます。
  4. フィールドのリストを再結合し、新しい CSV の行として出力します。
  5. すべての行が処理されるまで、手順 1 に戻ります。

正規表現 #1 テスト
正規表現 #2 テスト (ステージ 1)
正規表現 #2 テスト (ステージ 2)

これをPERLに翻訳する私の試み

于 2016-06-13T21:32:06.187 に答える