在X个逗号后拆分一个String数组

时间:2015-12-15 01:21:21

标签: arrays regex string split

我有一个字符串,其中 n 的值由逗号分隔。它看起来像这样 -

"0,3,03123132,\"2,59\",2015,132213131,\"This, is a message\",
2015,223123123,\"This, is a message number 2\",2015"

最多 n 数值。

我使用以下内容根据逗号分割值,但不能用双引号内的逗号分隔值。

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

它会返回这样的内容 -

[0,3,03123132,"2,59",2015,132213131,"This, is a message",
2015,223123123,"This, is a message number 2",2015]...

依此类推 n

我想将这个String拆分成行,行数等于数组的[1]元素的值。在上面的例子中,它总共有3行。这些行需要包含一组从元素[2]

开始的3个元素

所以最终结果看起来像这样 -

[03123132,"2,59",2015]
[132213131,"This, is a message",2015]
[223123123,"This, is a message number 2",2015]

最多 n 行数。

我做了一些关于如何做到这一点的研究,但它似乎没有提供一种简单的方法。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您不需要正则表达式来分割数据,csv.reader将完全符合您的要求:

from csv import  reader

s = "0,3,03123132,\"2,59\",2015,132213131,\"This, is a message\",2015,223123123,\"This, is a message number 2\",2015"

print(list(reader([s])[0]))

输出:

['0', '3', '03123132', '2,59', '2015', '132213131', 'This, is a message', 
'2015', '223123123', 'This, is a message number 2', '2015']

要从{2}开始对zip进行分组:

it = iter(list(reader([s]))[0][2:])

print(list(zip(it,it,it)))

哪会给你:

 [('03123132', '2,59', '2015'), ('132213131', 'This, is a message', '2015'), ('223123123', 'This, is a message number 2', '2015')]

或使用itertools.islice来避免切片并创建新列表:

from csv import reader

from itertools import islice

it = islice(next(reader([s])), 2, None)

print(list(zip(it, it, it)))

相同的输出:

[('03123132', '2,59', '2015'), ('132213131', 'This, is a message', '2015'), ('223123123', 'This, is a message number 2', '2015')]