非标准csv文件的正则表达式

时间:2016-12-14 14:45:12

标签: regex csv

我正在试图找出正确解析非标准csv文件的解决方案。 Csv分隔符是逗号。问题是,我必须解析第6个字段,但其中可能有零到多个逗号。 为了更好的可视化,这个字段用引号括起来,例如有一个逗号。行情可能没有。 因此,我需要在第5个字段之后和最后的三个字段之前解析所有内容。

示例:

记录1:

546511,56756121,None,None,channel10,"abcd,efgh",2016-11-29 22:50:00+01:00,125.0,False

正则表达式结果:" abcd,efgh"

记录2:

546511,56756121,None,None,channel10,ij,kl,mnop,2016-11-29 22:50:00+01:00,125.0,False

正则表达式结果:ij,kl,mnop

记录3:

546511,56756121,None,None,channel10,stuvwxyz,2016-11-29 22:50:00+01:00,125.0,False

正则表达式结果:stuvwxyz

请问这个正确的正则表达式是什么? 非常感谢

2 个答案:

答案 0 :(得分:0)

这将为你做到:

,

它匹配前五个字段(任何非,字符,一次或多次,然后是^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),(.*),([^,]+)\+\d\d:\d\d,([^,]+),([^,\n]+)$ 。然后捕获所需数据。最后匹配最后三个领域。

捕获组1的结果。

(如果你需要匹配,你必须指定正则表达式的味道。)

See it here at regex101

修改

好的,在考虑你的评论后,试试这个:

{1}

Here at Regex101

(注意!如果您只打算匹配一个实例,则不需要量词^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),"?(.*?)"?,([^,]+)\+\d\d:\d\d,([^,]+),([^,\n]+)$ 。)

修改2

行。我们再来一次。

无法通过一次操作删除组内的引号。但是,您可以使用

删除周围的引号
{{1}}

Here at Regex101。 (略微修改以更好地可视化。)

答案 1 :(得分:0)

或者,您可以指定要提取的短语周围的边界。例如(假设一边有一个像'channelxx'的测试,另一边有一个日期)。像这样。

^.\*channel[0-9][0-9],(.\*),20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] .*