Python正则提取字符串Item项时如何去除重复元素
问题根因
你当前的代码存在两个核心问题:
- 拆分后硬编码截取固定位置字符的逻辑容错性极差,一旦Item和编号之间的空格数量变化、编号位数变化,就会出现截取错误
- 没有加入去重逻辑,重复出现的Item编号会被直接追加到结果列表中,无法满足去重要求
可直接运行的正确实现
推荐直接用正则匹配所有符合格式的Item编号片段,再做保序去重,逻辑更严谨也更简洁:
import re a = "Item 1.01 Entry the party thereto Item 2.02 Exit Item 4.02 Please go from Item 1.01 Item 5.06 lets have some party " # 精准匹配所有「Item + 任意长度空格 + x.xx格式编号」的片段 all_items = re.findall(r"Item\s+\d+\.\d+", a) # Python 3.7+ 字典默认保留插入顺序,可直接实现保序去重 result = list(dict.fromkeys(all_items)) print(result) # 输出:['Item 1.01', 'Item 2.02', 'Item 4.02', 'Item 5.06']
兼容低版本Python的去重写法
如果你使用的Python版本低于3.7(字典不保证插入顺序),可以用集合标记已出现的元素实现保序去重,全版本通用:
result = [] exist_record = set() for item in all_items: if item not in exist_record: exist_record.add(item) result.append(item)
内容的提问来源于stack exchange,提问作者Saurabh Bulandani
相关产品推荐
相关产品推荐

