【问题标题】:Split a comma delimited string which may contain commas and escaped quotes between single quotes拆分逗号分隔的字符串,其中可能包含逗号和单引号之间的转义引号
【发布时间】:2017-12-04 05:46:30
【问题描述】:

如何拆分逗号分隔符字符串。字符串是一系列以逗号分隔的数字和单词。单词用单引号引起来,而数字则不用。单词可能包含非分隔逗号,在引号内应该没问题。单词可能包含其他类型的引号,这些引号必须由前面的反斜杠转义,如下所示:

'','some-mail@some-domain.org','f4c1bfd5-969d-\'4,7\"2a-,b1\'29-42de49eb4406',2827,1378614418

我曾尝试使用正则表达式 [^\'] 进行拆分,但这也会提取转义的逗号。

我尝试按字面意思计算字符作为替代方案,但这非常慢。

如果字符串中有转义的斜杠,python 的csv 阅读器也会在非定界逗号上拆分字符串。也许它不是有效的 CSV?

我应该得到的子字符串列表是:

[ 
'', # empty string
'some-mail@some-domain.org', # text like email
'f4c1bfd5-969d-\'4,7\"2a-,b1\'29-42de49eb4406', # text, comma and escaped quotes
2827, # number
1378614418 # number
]

这就是我使用 csv 模块的方式:

reader = csv.reader(StringIO(values_string), delimiter=',', quotechar="'", quoting=csv.QUOTE_ALL,skipinitialspace=True)

但我明白了:

['', 'some-mail@some-domain.org', 'f4c1bfd5-969d-\\4', '7\\"2a-', "b1\\'29-42de49eb4406'", '2827', '1378614418']

【问题讨论】:

  • 将标准库中的csv module 与适当的方言和/或格式参数一起使用。看来您可以使用默认值,但将引号字符从 " 更改为 '
  • @Blurp - 如果 csv 阅读器包含转义引号,则 csv 阅读器会在逗号中拆分它们
  • 如果您正确设置选项则不会
  • 这些数据的来源是什么?您是如何阅读的?
  • 我已经包含了我如何使用 csv 模块进行解析的 sn-p。如果我没有正确的选择,请赐教。

标签: python regex csv


【解决方案1】:
with open(file_name) as fp:
    reader = csv.reader(fp, quotechar="'", doublequote=False, escapechar='\\')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 2010-10-23
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多