【问题标题】:Regular Expression for Validating the Completeness of a CSV用于验证 CSV 完整性的正则表达式
【发布时间】:2017-08-13 22:56:32
【问题描述】:

我正在使用允许输入 CSV 文件的工作流自动化工具(使用 Java 构建)。将手动创建 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"/&*]+)*

我最近的一次。不捕捉“逗号空格逗号”。 而且我需要将整个输入字符串视为一个整体。

非常感谢您的阅读和帮助!

【问题讨论】:

    标签: java regex csv pattern-matching match


    【解决方案1】:
    sed -En "/^[^\s,][^,]*[^\s,](,[^\s,][^,]*[^\s,])*$/p"
    

    期望:

    • 开始“^”
    • 除了空格或逗号“[^\s,]
    • 不是逗号“[^,]”
    • 可能有多个“*”
    • 不是空格或逗号“[^\s,]” (不确定这是不是规则,如果不是,请删除)
    • 以下“(”
      • 逗号“,”
      • 如上所示
    • 直到这里“)”
    • 如果你喜欢“*”,请多次
    • 结尾“$”

    如果要使用整个字符串,请将其括在另一对“()”中并使用“\1”。
    我在 sed 中展示了一个演示者。
    我可以翻译成 perl 或 egrep 风格的正则表达式,但缺乏 java 使用的正则表达式风格的经验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      相关资源
      最近更新 更多