我正在试图找出正确解析非标准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
请问这个正确的正则表达式是什么? 非常感谢
答案 0 :(得分:0)
这将为你做到:
,
它匹配前五个字段(任何非,
字符,一次或多次,然后是^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),(.*),([^,]+)\+\d\d:\d\d,([^,]+),([^,\n]+)$
。然后捕获所需数据。最后匹配最后三个领域。
捕获组1的结果。
(如果你需要匹配,你必须指定正则表达式的味道。)
修改强>
好的,在考虑你的评论后,试试这个:
{1}
(注意!如果您只打算匹配一个实例,则不需要量词^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),"?(.*?)"?,([^,]+)\+\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] .*