很难得到所有regex可能性的组合列表

2024-10-03 02:42:35 发布

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

我正在使用exrex包为正则表达式生成所有排列的列表。但是,我有几个正则表达式,并希望创建一组所有排列(没有重复)。所以,假设:

from exrex import generate

my_regexs=('a|b','a|c')
expansions=map(generate,my_regexs)

也许我甚至不需要map或中间变量expansions来实现这个-不确定。现在,如何从以下列表中获得排序列表:

# Create a set from all of the expansions (e.g., let's store in myset, for clarity)
#     in order to merge duplicates
myset=... # Results in myset containing {'a','c','b'} - hash order
sorted_list=sorted(myset) # Finally, we get ['a','b','c']

谢谢你的帮助,我打赌有一个简单的一行一个列表理解,可以做到这一点

注意:我们处理的是包含多个生成器的map对象(即,多个生成器的序列容器,而不是列表的list!)

更新:我想我已经把输入和输出弄清楚了:

Input: ('a|b','a|c') # Two reg-exs, results in all-permutations: ['a','b','a','c']
Output: ['a','b','c'] # Eliminating duplicates, we get the output presented

Tags: theinfrommap列表myorderall
2条回答

另一个答案涉及嵌套的理解案例,因此我将更新这个答案以使用itertools.chain.from_iterable

from exrex import generate
from itertools import chain
flatten = chain.from_iterable

regexes = ('a|b', 'a|c')

ordered_unique = sorted(set(flatten(map(generate, regexes))))
from exrex import generate

rgxs = (r'a|b', r'a|c')
expansions = sorted(set(e for r in rgxs for e in generate(r)))

print(expansions)   # [u'a', u'b', u'c']

相关问题 更多 >