在逗号上拆分字符串但忽略双引号内的逗号?
Posted
技术标签:
【中文标题】在逗号上拆分字符串但忽略双引号内的逗号?【英文标题】:Split string on commas but ignore commas within double-quotes? 【发布时间】:2011-12-25 13:54:40 【问题描述】:我有一些如下所示的输入:
A,B,C,"D12121",E,F,G,H,"I9,I8",J,K
逗号分隔的值可以是任何顺序。我想用逗号分隔字符串;但是,在双引号内的情况下,我需要它既忽略逗号又去掉引号(如果可能)。所以基本上,输出将是这个字符串列表:
['A', 'B', 'C', 'D12121', 'E', 'F', 'G', 'H', 'I9,I8', 'J', 'K']
我看过其他一些答案,我认为正则表达式是最好的,但我很难想出它们。
【问题讨论】:
你考虑过在 Python 中使用csv 模块吗? 【参考方案1】:Lasse 是对的;这是一个逗号分隔的值文件,所以你应该使用csv
module。一个简单的例子:
from csv import reader
# test
infile = ['A,B,C,"D12121",E,F,G,H,"I9,I8",J,K']
# real is probably like
# infile = open('filename', 'r')
# or use 'with open(...) as infile:' and indent the rest
for line in reader(infile):
print line
# for the test input, prints
# ['A', 'B', 'C', 'D12121', 'E', 'F', 'G', 'H', 'I9,I8', 'J', 'K']
【讨论】:
我不确定这是否能回答问题。输出会是 OP 要求的吗?reader
在这里用在哪里,或者应该怎么用?
@heltonbiker 是的,它提供了所需的输出。请看我回答的最后一行,或者自己运行代码并测试一下。 csv.reader
在for
行中使用——它从输入可迭代中读取一行,并将其转换为单元格列表。
@heltonbiker 我对 Python 也有过这种感觉——感觉有时你什么都没做,但它仍然有效 :)
如果您来这里寻找此答案的正则表达式,请参阅this answer
您可以通过将skipinitialspace=True
传递给reader
来解决逗号后的空格问题。以上是关于在逗号上拆分字符串但忽略双引号内的逗号?的主要内容,如果未能解决你的问题,请参考以下文章