2017-03-22 3 views
0

CSVファイルの入力を可能にするワークフロー自動化ツール(Javaで構築)を使用しています。 CSVは手動で作成され、入力された列に基づいて、特定のアクションがワークフローによって実行されます。したがって、私は次の条件が検出されないだけで(一度に一つのCSV行)文字列と一致する必要があります。文字列の先頭にCSVの完全性を検証するための正規表現

  • コンマ
  • カンマスペースを[第一の値が欠落していることを示し]コンマ

    HMSS TN PUPIL EDITION LV 5,HMHSS Ohio PE LV 5-6 Making A New Nation, HMH SCIFSN TN SE G6 2019, CA IMPUSHGGROCONFG8SUBBXCNTLBL, "R180 NG LBOOK TG STG B NAT""L", HMH BIEN DIT TE LV1A/18/1 2018, DTM NOW TE M&D, MD GOMATH SP SE INACTV WKTXT ACC7 2014*, "0158009673, 0158009681, 015800969X, 0158009703" 
    
    を一致させるために、以下の入力テキストを考えてみましょう

[最後の値が欠落していることを示し]文字列の最後に

  • カンマを[中間の値が欠落していることを示し]の

    入力テキストルール: 宇宙

    で終了することはできません、スペースで始めることはできません。これが一致していなければならない - 第一の値が欠落している:

    ,HMHSS Ohio PE LV 5-6 Making A New Nation, HMH SCIFSN TN SE G6 2019, CA IMPUSHGGROCONFG8SUBBXCNTLBL, "R180 NG LBOOK TG STG B NAT""L", HMH BIEN DIT TE LV1A/18/1 2018, DTM NOW TE M&D, MD GOMATH SP SE INACTV WKTXT ACC7 2014*, "0158009673, 0158009681, 015800969X, 0158009703" 
    

    これが一致していなければならない - 中間値が欠落しています。

    HMHSS Ohio PE LV 5-6 Making A New Nation, , HMH SCIFSN TN SE G6 2019, CA IMPUSHGGROCONFG8SUBBXCNTLBL, "R180 NG LBOOK TG STG B NAT""L", HMH BIEN DIT TE LV1A/18/1 2018, DTM NOW TE M&D, MD GOMATH SP SE INACTV WKTXT ACC7 2014*, "0158009673, 0158009681, 015800969X, 0158009703" 
    

    これが一致していなければならない - 最後の値が欠落しています。

    HMHSS Ohio PE LV 5-6 Making A New Nation, HMH SCIFSN TN SE G6 2019, CA IMPUSHGGROCONFG8SUBBXCNTLBL, "R180 NG LBOOK TG STG B NAT""L", HMH BIEN DIT TE LV1A/18/1 2018, DTM NOW TE M&D, MD GOMATH SP SE INACTV WKTXT ACC7 2014*, "0158009673, 0158009681, 015800969X, 0158009703", 
    

    式Iはを試してみた:

    ^(("(?:[^"]|"")*"|[^,]*)(,("(?:[^"]|"")*"|[^,]*))*)$ 
    

    は、文字列全体


    [-\w\s"/&*]+(,[-\w\s"/&*]+)* 
    

    私が来ている最も近い一致します。 「カンマ区切りカンマ」をキャッチしません。 そして、入力文字列全体を全体として考える必要があります。

    お読みいただきありがとうございます。

  • 答えて

    0
    sed -En "/^[^\s,][^,]*[^\s,](,[^\s,][^,]*[^\s,])*$/p" 
    

    期待:

    • スタート "^"
    • を空白またはカンマ以外の何か「[^ \ sの、]
    • カンマ以外の何か "[^、]"
    • 多分 "*"
    • 空白またはカンマ "[^ \ s、]"以外のもの (これはルールではありませんか、削除しない場合)
    • あなたが好きなら
    • "*" を複数回
    • "("
      • カンマ ""
      • のような、ここまで
    • 上記参照 ")" 以下末尾 "$"

    文字列全体を使用する場合は、別の "()"のペアで囲み、 "\ 1"
    私はsedのデモを見せています。
    私はregexesのperlまたはegrepフレーバーに翻訳できますが、javaで使用される正規表現フレーバーの経験はありません。