Проблемы с получением объединенного списка всех возможностей регулярных выражений - PullRequest
0 голосов
/ 25 мая 2018

Я использую пакет 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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Другой ответ охватывает вложенный случай понимания, поэтому я обновляю этот ответ, чтобы использовать 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))))
0 голосов
/ 25 мая 2018
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']
...