首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex有助于将列表拆分成两个元组

Regex有助于将列表拆分成两个元组
EN

Stack Overflow用户
提问于 2013-02-16 06:03:11
回答 2查看 132关注 0票数 2

给定一个演员列表,他们的角色名称放在括号中,用分号(;)或逗号(,)分隔:

代码语言:javascript
运行
复制
Shelley Winters [Ruby]; Millicent Martin [Siddie]; Julia Foster [Gilda]; 
Jane Asher [Annie]; Shirley Ann Field [Carla]; Vivien Merchant [Lily]; 
Eleanor Bron [Woman Doctor], Denholm Elliott [Mr. Smith; abortionist]; 
Alfie Bass [Harry]

我该如何将它解析成一个包含两个类型的列表,其形式为(actor,character),...

代码语言:javascript
运行
复制
--> [('Shelley Winters', 'Ruby'), ('Millicent Martin', 'Siddie'), 
     ('Denholm Elliott', 'Mr. Smith; abortionist')]

我最初有:

代码语言:javascript
运行
复制
actors = [item.strip().rstrip(']') for item in re.split('\[|,|;',data['actors'])]
data['actors'] = [(actors[i], actors[i + 1]) for i in range(0, len(actors), 2)]

但这并不是很有效,因为它还将项目拆分在括号中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-16 06:17:21

你可以使用类似这样的东西:

代码语言:javascript
运行
复制
>>> re.findall(r'(\w[\w\s\.]+?)\s*\[([\w\s;\.,]+)\][,;\s$]*', s)
[('Shelley Winters', 'Ruby'),
 ('Millicent Martin', 'Siddie'),
 ('Julia Foster', 'Gilda'),
 ('Jane Asher', 'Annie'),
 ('Shirley Ann Field', 'Carla'),
 ('Vivien Merchant', 'Lily'),
 ('Eleanor Bron', 'Woman Doctor'),
 ('Denholm Elliott', 'Mr. Smith; abortionist'),
 ('Alfie Bass', 'Harry')]

使用.*?还可以简化一些事情

代码语言:javascript
运行
复制
re.findall(r'(\w.*?)\s*\[(.*?)\][,;\s$]*', s)
票数 4
EN

Stack Overflow用户

发布于 2013-02-16 06:17:07

代码语言:javascript
运行
复制
inputData = inputData.replace("];", "\n")
inputData = inputData.replace("],", "\n")
inputData = inputData[:-1]
for line in inputData.split("\n"):
    actorList.append(line.partition("[")[0])
    dataList.append(line.partition("[")[2])
togetherList = zip(actorList, dataList)

这是一个小技巧,我相信你可以从这里把它清理干净。我将详细介绍这种方法,以确保您理解我在做什么。

我用一个换行符替换了;,,稍后我将用它将每一对都拆分为各自的行。假设你的内容没有被错误的];],填充,这应该是可行的。但是,你会注意到最后一行的末尾会有一个],因为它不需要逗号或分号。因此,我把它和第三行拼接起来。

然后,只需使用我们在输入字符串中创建的每一行上的分区函数,我们将左边的部分分配给参与者列表,将右边的部分分配给数据列表,并忽略括号(位置1)。

之后,Python非常有用的压缩函数将每个列表的第i个元素关联到一个匹配的元组列表中,从而为我们完成这项工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14904099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档