在逗号上拆分字符串但忽略双引号内的逗号?

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.readerfor 行中使用——它从输入可迭代中读取一行,并将其转换为单元格列表。 @heltonbiker 我对 Python 也有过这种感觉——感觉有时你什么都没做,但它仍然有效 :) 如果您来这里寻找此答案的正则表达式,请参阅this answer 您可以通过将skipinitialspace=True 传递给reader 来解决逗号后的空格问题。

以上是关于在逗号上拆分字符串但忽略双引号内的逗号?的主要内容,如果未能解决你的问题,请参考以下文章

在逗号上拆分字符串并忽略双引号中的逗号[重复]

通过排除双引号内的逗号来拆分字符串

GROOVY - 解析CSV:忽略双引号内的逗号

hive导入csv文件,字段中双引号内有逗号

Java:拆分逗号分隔的字符串但忽略引号中的逗号

逗号和双引号CSV格式的正则表达式拆分[重复]