python正则表达式删除括号内的重复项

2024-04-26 00:57:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个成功的代码,它将单词添加到括号中:但是我需要删除其中的重复项。你知道吗

我的代码:

import re
import collections

class Group:
    def __init__(self):
        self.members = []
        self.text = []

with open('text1.txt') as f:
    groups = collections.defaultdict(Group)
    group_pattern = re.compile(r'^(\S+)\((.*)\)$')
    current_group = None

    for line in f:
        line = line.strip()
        m = group_pattern.match(line)
        if m:    # this is a group definition line
            group_name, group_members = m.groups()
            groups[group_name].members.extend(group_members.split(','))
            current_group = group_name
        else:
            if (current_group is not None) and (len(line) > 0):
                groups[current_group].text.append(line)

for group_name, group in groups.items():
    print "%s(%s)" % (group_name, ','.join(group.members))
    print '\n'.join(group.text)
    print

我的文本文件:

 Car(skoda,benz,bmw,audi)
 The above mentioned cars are sedan type and gives long rides efficient
 ......

Car(Rangerover,Hummer,audi)
SUV cars are used for family time and spacious.

输出为:

Car(skoda,benz,bmw,audi,Rangerover,Hummer,audi,ferrari,lamborghini,porsche)
The above mentioned cars are sedan type and gives long rides efficient
......
SUV cars are used for family time and spacious.

这里是输出中的重复项,如何删除括号内的重复项?你知道吗


Tags: andtextnameselfforlinegroupcurrent
1条回答
网友
1楼 · 发布于 2024-04-26 00:57:56

您不需要使用regex来删除重复项:在Group中生成members一个set(即self.members = set()而不是self.members = [])。然后自动删除重复项。但是,您将无法使用groups[group_name].members.extend(group_members.split(','))。相反,必须使用|运算符联合集,或使用update更新它们:

groups[group_name].members |= set(group_members.split(','))

或者

groups[group_name].members.update(group_members.split(','))

或者,您可以在输出之前调用set,在那里执行重复删除:

print "%s(%s)" % (group_name, ','.join(set(group.members)))

注意set没有排序,因此如果您需要与输入中的排序保持一致,这将不起作用。相反,您需要手动筛选列表中的重复项:

filtered_members = []
for x in groups[group_name].members:
    if x not in filtered_members:
        filtered_members.append(x)

相关问题 更多 >