5

如何转换"1,,2'3,4'"成列表?逗号分隔各个项目,除非它们在引号内。在这种情况下,逗号将包含在项目中。

这是期望的结果:['1', '', '2', '3,4']。我在另一个线程上发现忽略引号的一个正则表达式如下:

re.compile(r'''((?:[^,"']|"[^"]*"|'[^']*')+)''')

但这给了我这个输出:

['', '1', ',,', "2'3,4'", '']

我不明白,这些额外的空字符串是从哪里来的,为什么这两个逗号甚至都被打印出来了,更不用说一起打印了。

我尝试自己制作这个正则表达式:

re.compile(r'''(, | "[^"]*" | '[^']*')''')

最终没有检测到任何东西,只是返回了我的原始列表。

我不明白为什么,它至少不应该检测到逗号吗??如果我在逗号后添加 a,也会出现同样的问题。

4

2 回答 2

10

而不是正则表达式,您最好使用该csv模块,因为您正在处理的是一个 CSV 字符串:

from cStringIO import StringIO
from csv import reader

file_like_object = StringIO("1,,2,'3,4'")
csv_reader = reader(file_like_object, quotechar="'")
for row in csv_reader:
    print row

这将产生以下输出:

['1', '', '2', '3,4']
于 2012-08-04T02:59:52.973 回答
7

pyparsing 包括逗号分隔列表的预定义表达式:

>>> from pyparsing import commaSeparatedList
>>> s = "1,,2'3,4'"
>>> print commaSeparatedList.parseString(s).asList()
['1', '', "2'3", "4'"]

嗯,看起来您的数据中有错字,在 2 之后缺少逗号:

>>> s = "1,,2,'3,4'"
>>> print commaSeparatedList.parseString(s).asList()
['1', '', '2', "'3,4'"]
于 2012-08-04T03:02:54.707 回答