如何压缩/拆分列表中由"分隔的项目和{'

时间:2018-05-15 21:42:56

标签: python regex nested-lists

我有以下列表

mylist = ["'alpha','beta'",'delta','phi']

第一个元素的双引号和单引号的组合阻止我分别正确使用alpha和beta。 当我使用

mylist[1] 

我得到了

delta

而不是beta,这就是我想要的

如何将此列表的第一个元素拆分为2个项目并重新插入,以便我在此列表中有4个项目?

在你告诉我不要以这种方式写一个列表之前,要知道它是我已经从

拆分的单行输出
"'alpha, beta'"

编辑:你们当中有很多人要求提供构成此列表的代码....我真的无法发布它,因为部分代码需要登录网站访问受限数据。

以下代码解决了我的问题:

mylist = [re.sub('^\W+|\W+$', '', i) for b in map(lambda x:re.split(',', x), mylist) for i in b]

2 个答案:

答案 0 :(得分:0)

您可以使用map

import re

def split_words(d):
  return [re.sub('^\W+|\W+$', '', i) for b in map(lambda x:re.split("(?<='),(?=')", x), d) for i in b]

mylist = [["'alpha','beta'",'delta','phi'], ["'alpha','beta'",'delta','phi, theta']]
final_results = list(map(split_words, mylist))

输出:

[['alpha', 'beta', 'delta', 'phi'], ['alpha', 'beta', 'delta', 'phi, theta']]

答案 1 :(得分:0)

另一个使用正则表达式的人:你可以只findall字符串中的\w+字词:

>>> mylist = ["'alpha','beta'",'delta','phi']

>>> [y for x in mylist for y in re.findall("\w+", x)]
['alpha', 'beta', 'delta', 'phi']

split其他所有内容\W,或更具体地[,"' ]

>>> [y for x in mylist for y in re.split("\W", x) if y]
['alpha', 'beta', 'delta', 'phi']

>>> [y for x in mylist for y in re.split("[,'\" ]", x) if y]
['alpha', 'beta', 'delta', 'phi']