拆分逗号分隔的字符串,该字符串可能包含逗号和单引号之间的转义引号

时间:2017-12-04 05:46:31

标签: python regex csv

如何拆分逗号分隔符字符串。该字符串是一系列逗号分隔的数字和单词。单词用引号引用,数字不引用。单词可能包含非定界逗号,在引号内应该没有。单词可能包含其他类型的引号,必须通过前面的反斜杠进行转义,如下所示:

'','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']

1 个答案:

答案 0 :(得分:3)

with open(file_name) as fp:
    reader = csv.reader(fp, quotechar="'", doublequote=False, escapechar='\\')