正则表达式分割csv文件

讲道理的话,直接用最基本的字符串查找逗号然后截取的方式也可以,不过这显然不符合我的逼格嘛,那就用正则表达式好好折腾一下。

需求其实比较简单,csv文件的格式如下

1
2
3
1,ABC,7777,
2,BCD,8888,
...

所有元素都是用逗号,分隔。也就是说,对于读入的每一行,我们要截取的字符串为逗号(或开头)中间部分。最开始的时候就是去各种百度谷歌有没有现成的(我不是很熟悉正则表达式ORZ),发现大部分都不能直接用,各个博客里写的一坨屎样。想想还是自己好好看了下wiki手撸了一个。正则表达式为

1
((?<=,)|^)([^,]*)((?=,)|$)

具体的含义可以看正则表达式wiki不过这里有个小小的地方需要注意,如果出现了空内容也会被匹配(即逗号间内容为空)

另外,在python里,如果需要找到所有的匹配,应该使用findall方法,而不是search或者match方法。具体如下

1
2
3
m = re.findall(r'((?<=,)|^)([^,]*)((?=,)|$)', line)
id_str = m[0][1]
email_str = m[1][1]