在.csv文件中,我有如下行:
10,"nikhil,khandare","sachin","rahul",viru
我想用逗号(,)分割线。但是,我不想在双引号之间拆分单词("")。如果我使用逗号分割,我将获得包含以下项目的数组:
10
nikhil
khandare
sachin
rahul
viru
但我不希望双引号之间的项目用逗号分隔。我想要的结果是:
10
nikhil,khandare
sachin
rahul
viru
请帮我解决这个问题。
答案 0 :(得分:2)
用于分隔字段的字符不应出现在字段本身中。如果可能,请将,
替换为;
以分隔csv文件中的字段,这样可以让您的生活更轻松。但是,如果您坚持使用,
作为分隔符,则可以使用此正则表达式拆分每一行:
/((?:[^,"]|"[^"]*")+)/
例如,在Python中:
import re
s = '10,"nikhil,khandare","sachin","rahul",viru'
re.split(r'((?:[^,"]|"[^"]*")+)', s)[1::2]
=> ['10', '"nikhil,khandare"', '"sachin"', '"rahul"', 'viru']
现在要获得问题中显示的完全结果,我们只需删除那些额外的"
字符:
[e.strip('" ') for e in re.split(r'((?:[^,"]|"[^"]*")+)', s)[1::2]]
=> ['10', 'nikhil,khandare', 'sachin', 'rahul', 'viru']
答案 1 :(得分:1)
如果你真的总是有这么简单的结构,你可以在丢弃第一个数字和逗号后使用“,”(是的,带引号)拆分
如果不是,您可以使用一种非常简单的state machine形式从左到右解析您的输入。您将有两种状态:内部报价和外部报价。正则表达式也是一种好的(并且更简单)方式,如果你已经知道它们(因为它们基本上相当于状态机,只是另一种形式)