2017-03-22 38 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", 

的表達我試過

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

匹配整個字符串


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

我來最接近的一次。不抓住「逗號空格逗號」。 我需要考慮整個輸入字符串。

非常感謝您的閱讀和您的協助!

回答

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

期待:

  • 開始 「^」 不是空格或逗號等
  • 東西「[^ \ S,]不是逗號其他
  • 東西 「[^,]」
  • 可能很多「*」比空格或逗號等
  • 東西「[^ \ S,]」 (不知道這一個是一個規則,如果刪除不)
  • 下面的 「(」
    • 一個逗號 「」
    • 像見上
  • 直到這裏 「)」
  • 幾次,如果你喜歡 「*」
  • 的結束「$」

如果要使用整個字符串,請將其放在另一對「()」中並使用「\ 1」。
我在sed展示了一個演示器。
我可以翻譯成perl或egrep正則表達式的味道,但缺乏java使用正則表達式的經驗。