首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于验证CSV完整性的正则表达式

用于验证CSV完整性的正则表达式
EN

Stack Overflow用户
提问于 2017-03-22 01:47:16
回答 1查看 37关注 0票数 0

我正在使用一个工作流自动化工具(用Java构建),它允许输入CSV文件。CSV将手动创建,并且基于哪些列被填充,某些操作将由工作流执行。因此,只有在没有找到以下条件时,我才需要匹配字符串(一次只匹配一个CSV行):

  • 字符串开头处的逗号表示缺少第一个值。
  • 逗号空格逗号表示缺少中间值。
  • 字符串末尾的逗号表示缺少最后一个值

考虑下面要匹配的输入文本

代码语言:javascript
复制
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"

输入文本规则:不能以空格开头,不能以空格结尾

这不应该与第一个值匹配--缺少第一个值:

代码语言:javascript
复制
,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"

这不应该匹配-缺少中间值:

代码语言:javascript
复制
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"

这不应该匹配-缺少最后一个值:

代码语言:javascript
复制
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",

我试过的表达式

代码语言:javascript
复制
^(("(?:[^"]|"")*"|[^,]*)(,("(?:[^"]|"")*"|[^,]*))*)$

匹配整个字符串。

代码语言:javascript
复制
[-\w\s"/&*]+(,[-\w\s"/&*]+)*

是我最近的一次。没有抓住“逗号空格逗号”。我需要考虑整个输入字符串作为一个整体。

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

EN

回答 1

Stack Overflow用户

发布于 2017-03-22 02:34:03

代码语言:javascript
复制
sed -En "/^[^\s,][^,]*[^\s,](,[^\s,][^,]*[^\s,])*$/p"

预期:

  • 开始"^“
  • 除了空格或逗号“^s”之外,
  • 不是逗号"^,“
  • 可能有许多"*“
  • 除空格或逗号“^s”以外的其他内容(不确定这一项是否为规则,如果不是,则删除)
  • 以下"(“”
    • 逗号",“
    • 如上所示

  • “直到这里")”
  • 几次如果你喜欢"*“
  • 最后的"$“

如果要使用整个字符串,请将其括在另一对"()“中,并使用"\1”。

我给一名示威者看过苏德。

我可以转换为perl或egrep风格的regexes,但缺乏java使用的regex风格的经验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42941291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档