正则解决一个烦心事
最近有点烦,中国的bonus数据库要和全球的整合了,然后HR想让我帮忙导出一张全表。
导出是没什么问题,但是呢,导入Excel的时候问题就来了。导出的时候呢我们用的是csv的格式,csv呢就是用逗号来分割数据的,然后问题就来了。导出记录里面,有一些是描述字段,这个里面有人也会写逗号啊。。。
比如说一个这样的表
|名称|描述|
|项目1|巴拉巴拉,巴拉巴拉,巴拉巴拉|
然后导出csv就是 “项目1”,”巴拉巴拉,巴拉巴拉,巴拉巴拉”
之后Excel就勤勤恳恳的按照逗号分了四个元素出来,之后大家就抓狂了。
Notes还就提供那么几个导出的选项,csv还算是比较友好的了,其他几个更不能用。
那怎么办呢,想想先用一个脚本直接输出Excel呗,想法很好,然后运行的时候报错了,大致估计一下是那里的内容和Excel表格填充格式冲突了,但是具体哪里冲突要想用Notes的debug工具调出来我想想还是先去撞撞墙再说。
于是还是回到这个csv来,起码纯文本的东西,办法还是多一点的。
比如说其实问题就是在一个字符串中有逗号,导致了Excela不能正确导入,那我把逗号删掉或者换掉不就行了。具体一点是在怎样的格式里 “xxxx,xxx,xxx” 把逗号都换成随便什么符号,然后就能正常导入Excel了,大不了导进去以后我再在Excel里面做一次替换,把逗号换回来。
想想怎么做,思来想去,只能用正则了,虽然我看正则和看医生写的病历差不多。
不过好在我的需求简单,先想想怎么适配:我要适配的其实就是两个引号中间夹着的逗号,那还不简单,轻轻松松写出来:
"\w*\,\w*"
然后一匹配,””,””这样的也给我匹配出来了,失败。
好吧,不能连着两个引号的,于是
"[^\"]*\,[^\"]* "
还是””,””,失败,不应该用*的,应该用+于是
"[^\"]+\,[^\"]+"
然后有进步,匹配出”,,”这样的来了。
终于,最后还是写出来了:
"[^\,\"]+\,[^\"]+"
这下总算是OK了,解释一下:
先找一个引号,然后在引号后面[^\”\,]+表示至少有一个非引号或者逗号的字符,然后中间夹了一个逗号\,最后还以一个引号结束。
匹配写好了之后,替换就简单了,把中间的逗号换掉就好,我换成了三个@,找起来方便一点:
\1\@\@\@\3
至此,问题解决,还是有点小成就感的。

