【问题标题】: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 模块吗?

标签: python regex csv split double-quotes


【解决方案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 来解决逗号后的空格问题。
猜你喜欢
  • 2020-08-03
  • 1970-01-01
  • 2020-04-05
  • 2016-03-19
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多