Python 将具有多个列表/数组的一个字符串转换为单独的列表

Python 将具有多个列表/数组的一个字符串转换为单独的列表,python,xml,elementtree,plaintext,Python,Xml,Elementtree,Plaintext,标题太糟糕了。这就是我的意思。我正在使用Wolfram | Alpha的API。在解析它时,我得到了这些可怕的字符串,就像这样(通过查询“蜘蛛侠”): “年份|标题| 1962年中期|神奇幻想| 15 |漫画书1967 |蜘蛛侠|动画>1977 |神奇蜘蛛侠| 1978年电视|任务袍| 2蜘蛛侠| 2002年电子游戏|蜘蛛侠|电影” 这实际上是一个字符串表示,应该是这样的列表() [年份、头衔、中等] [1962年,《神奇幻想》第15期,漫画书] [1967年,蜘蛛侠,电子游戏] [2002,蜘

标题太糟糕了。这就是我的意思。我正在使用Wolfram | Alpha的API。在解析它时,我得到了这些可怕的字符串,就像这样(通过查询“蜘蛛侠”):

“年份|标题| 1962年中期|神奇幻想| 15 |漫画书1967 |蜘蛛侠|动画>1977 |神奇蜘蛛侠| 1978年电视|任务袍| 2蜘蛛侠| 2002年电子游戏|蜘蛛侠|电影”

这实际上是一个字符串表示,应该是这样的列表()

[年份、头衔、中等]

[1962年,《神奇幻想》第15期,漫画书]

[1967年,蜘蛛侠,电子游戏]

[2002,蜘蛛侠,电影]

我可以很容易地把它们分成一个大的列表…但是我想不出一个简单的方法让它们像应该的那样进入列表(如上所示)。除了转换成一个大列表、解析列表、通过每隔三个项目创建一个新列表将它们划分为列表列表之外,还有什么建议吗

我的想法(很长的路):

输出:


我不确定您是否可以自动将“medium”与“1962”分开。使用
csv
模块,使用特定于您的案例的
行终止符和
分隔符如何?看。@wRAR你完全正确。几分钟前,在实现模拟代码后,我才意识到这一点。我一直认为他们使用了两个不同版本的“|”,其中一个没有被“分开”-非常感谢。仍然在弄清楚它是如何工作的,所以我可以再次使用这个方法(我知道它是正则表达式,但我不太精通使用它们)。你是一个奇迹工作者!再次感谢!如果每个列表有两个项目,但第二个项目可能包含也可能不包含多个由新行分隔的项目,该怎么办?例如:sex |男性家庭:本叔叔(叔叔)(纽兰)梅阿姨(阿姨)例如:sex |男性家庭:本叔叔(叔叔)(纽兰)梅阿姨(阿姨)(纽兰)。。。等等…@jpcguy89——目前很难理解您的示例与您问题中的数据样本是如何匹配的。你可以用最新的样本编辑你的问题,我会试着看一看。我想我找到了答案。(我遇到了另一段数据,其中有多个项目用新行分隔(使用我给出的示例)“年”、“标题”和/或“中”。使用正则表达式的不同部分作为参考,并以您的答案作为指导,我得出了:self.goodText=zip([(I.strip()表示I in re.split(“(\n)\\\\\\\\>”,att.text)如果i和i.strip())]*3)
listA = list()
listA = textRepresentation.split("|")
listB = list()
listC = list()
i = 1
for item in listA:
  if(i == 3):
    listB.append(listC)
    i = 1
  else:
    listC.append(item)
    i++
import re
zip(*[(i.strip() for i in re.split('(\d{4})|\||>', text) if i and i.strip())]*3)
[('year', 'title', 'medium'),
 ('1962', 'Amazing Fantasy #15', 'comic book'),
 ('1967', 'Spider-Man', 'animation'),
 ('1977', 'The Amazing Spider-Man', 'television'),
 ('1978', 'Questprobe #2 Spider-Man', 'video game'),
 ('2002', 'Spider-Man', 'movie')]