我较少使用正则表达式来查找第6列为空“”的行。
我使用了以下正则表达式:
^(.*?,){5}"",
但它与此匹配:
a,b,c,d,e,""
并与此匹配:
a,b,c,d,e,f,g,"",
我在做什么错了?
答案 0 :(得分:1)
您的正则表达式^(.*?,){5}""
使用了一个非贪婪部分(.*?,)
,该部分试图进行尽可能少的匹配以获得匹配并重复5次。
您匹配a,b,c,d,
的前4次。第五次尝试匹配e,
,然后匹配""
,但没有匹配。
在第五次重复中,此部分(.*?,)
尝试至少匹配任何字符(由于点也与逗号匹配,所以它本身也可以是逗号),然后是逗号,直到遇到双引号为止它与e,f,g,
匹配。
使用csv解析器是更好的选择,但是如果您想使用正则表达式作为示例数据,则可以使用否定的character class而不是逗号或换行符,然后将模式重复4次匹配逗号,然后再次匹配不逗号,然后匹配""
要匹配以下逗号分隔的数据,您可以再次匹配逗号,然后不使用逗号或换行符零次或更多次并声明字符串$
的结尾