我有一个字符串,其中 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 行数。
我做了一些关于如何做到这一点的研究,但它似乎没有提供一种简单的方法。
感谢任何帮助。
答案 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')]