2

在 .csv 文件中,我有如下行:

10,"nikhil,khandare","sachin","rahul",viru  

我想用逗号(,)分割行。但是我不想在双引号(“”)之间分割单词。如果我使用逗号分割,我将得到包含以下项目的数组:

10  
nikhil  
khandare  
sachin  
rahul  
viru  

但我不希望双引号之间的项目用逗号分隔。我想要的结果是:

10
nikhil,khandare
sachin
rahul
viru

请帮我解决这个问题。

4

2 回答 2

2

用于分隔字段的字符不应出现在字段本身中。如果可能,将 csv 文件中的字段替换,;分隔字段,这将使您的生活更轻松。但是如果你坚持使用,as 分隔符,你可以使用这个正则表达式分割每一行:

/((?:[^,"]|"[^"]*")+)/

例如,在 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']
于 2013-06-23T16:24:49.280 回答
1

如果你真的总是有这样一个简单的结构,你可以在丢弃第一个数字和逗号后使用“,”(是的,带引号)进行拆分

如果不是,您可以使用一种非常简单的状态机形式从左到右解析您的输入。您将有两种状态:内部引号和外部。如果您已经知道正则表达式也是一种很好(并且更简单)的方法(因为它们基本上相当于状态机,只是以另一种形式)

于 2013-06-23T16:25:38.247 回答