针对CSV的正则表达式,我在做什么错了

时间:2018-08-12 00:38:46

标签: regex

我较少使用正则表达式来查找第6列为空“”的行。

我使用了以下正则表达式:

^(.*?,){5}"",

但它与此匹配:

a,b,c,d,e,""

并与此匹配:

a,b,c,d,e,f,g,"",

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您的正则表达式^(.*?,){5}""使用了一个非贪婪部分(.*?,),该部分试图进行尽可能少的匹配以获得匹配并重复5次。 您匹配a,b,c,d,的前4次。第五次尝试匹配e,,然后匹配"",但没有匹配。

在第五次重复中,此部分(.*?,)尝试至少匹配任何字符(由于点也与逗号匹配,所以它本身也可以是逗号),然后是逗号,直到遇到双引号为止它与e,f,g,匹配。

使用csv解析器是更好的选择,但是如果您想使用正则表达式作为示例数据,则可以使用否定的character class而不是逗号或换行符,然后将模式重复4次匹配逗号,然后再次匹配不逗号,然后匹配""

要匹配以下逗号分隔的数据,您可以再次匹配逗号,然后不使用逗号或换行符零次或更多次并声明字符串$的结尾

^[^,\r\n]+(?:,[^,\r\n]+){4},""(?:,[^,\r\n]+)*$