将逗号分隔的字符串转换为列表,但忽略引号中的逗号

2024-05-17 13:07:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

但这给了我这样的输出:

^{pr2}$

我不明白这些多余的空字符串是从哪里来的,为什么两个逗号会被打印出来,更不用说一起了。在

我试着自己做这个正则表达式:

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

结果什么都没发现,只是返回了我原来的列表。在

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


Tags: 项目字符串re列表情况线程引号逗号
2条回答

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

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

嗯,看起来你的数据有误,2:

^{pr2}$

使用^{}模块代替正则表达式可能更好,因为您要处理的是一个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

结果如下:

^{pr2}$

相关问题 更多 >