You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并多个正则表达式的生成结果并实现去重排序?

解决多个exrex生成器去重并排序的问题

没问题,这事儿很容易搞定!你想要的简洁实现方式,不管是用集合推导式还是借助itertools,都能一行代码完成需求。

核心思路

你手里的expansions是个包含多个生成器的map对象,没法直接转集合去重——得先把每个生成器里的元素都取出来,再统一去重,最后排序。

方案1:集合推导式(最直观)

直接用两层循环的集合推导式,一次性完成“遍历所有生成器→取出所有元素→自动去重”,最后排序:

from exrex import generate

my_regexs = ('a|b', 'a|c')
# 一行搞定去重+排序
sorted_list = sorted({item for gen in map(generate, my_regexs) for item in gen})

print(sorted_list)  # 输出: ['a', 'b', 'c']

拆解下逻辑:

  • map(generate, my_regexs):给每个正则表达式生成对应的迭代器(生成器)
  • 外层for gen in ...:遍历每个生成器
  • 内层for item in gen:取出每个生成器里的所有结果项
  • 大括号{}:把所有项放进集合,自动剔除重复的'a'
  • sorted():把无序的集合转换成你需要的有序列表

方案2:用itertools.chain扁平化迭代器

如果你习惯用itertools的工具,也可以用chain.from_iterable把多个生成器扁平化成一个迭代器,再转集合去重:

from exrex import generate
from itertools import chain

my_regexs = ('a|b', 'a|c')
sorted_list = sorted(set(chain.from_iterable(map(generate, my_regexs))))

print(sorted_list)  # 输出同样是: ['a', 'b', 'c']

这个思路更偏向“先把所有迭代器合并成一个,再统一处理”,效果和方案1完全一致。

关于中间变量的选择

如果你不需要保留expansions这个中间对象,直接把map(generate, my_regexs)放进推导式/chain里就行,不用额外定义变量——完全符合你要的简洁性。

内容的提问来源于stack exchange,提问作者Michael Goldshteyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:50:00