使用自定义分隔符拆分字符串,尊重并保留引号(单引号或双引号)

luc*_*uca 1 python regex

我有一个像这样的字符串:

>>> s = '1,",2, ",,4,,,\',7, \',8,,10,'
>>> s
'1,",2, ",,4,,,\',7, \',8,,10,'
Run Code Online (Sandbox Code Playgroud)

我想使用不同的分隔符(不仅仅是空格)来分割它,并且我还想尊重和保留引号(单引号或双引号)。

s按分隔符拆分时的预期结果,

['1', ',2, ', '', '4', '', '', ',7, ', '8', '', '10', '']
Run Code Online (Sandbox Code Playgroud)

Sav*_*Sav 5

看起来你正在重新发明 python 模块 csv。含电池。

In [1]: import csv
In [2]: s = '1,",2, ",,4,,,\',7, \',8,,10,'
In [3]: next(csv.reader([s]))
Out[3]: ['1', ',2, ', '', '4', '', '', "'", '7', " '", '8', '', '10', '']
Run Code Online (Sandbox Code Playgroud)

我认为,正则表达式通常不是一个好的解决方案。在意想不到的时刻,它可能会出奇地慢。在 csv 模块中可以调整方言,并且可以轻松处理任意数量的字符串/文件。

我无法同时将 csv 调整为 quotechar 的两个变体,但您真的需要它吗?

In [4]: next(csv.reader([s], quotechar="'"))
Out[4]: ['1', '"', '2', ' "', '', '4', '', '', ',7, ', '8', '', '10', '']
Run Code Online (Sandbox Code Playgroud)

或者

In [5]: s = '1,",2, ",,4,,,",7, ",8,,10,'
In [6]: next(csv.reader([s]))
Out[6]: ['1', ',2, ', '', '4', '', '', ',7, ', '8', '', '10', '']
Run Code Online (Sandbox Code Playgroud)