Минимизация регулярного выражения и минимизация конечного автомата - это очень разные проблемы. Действительно, хотя DFA и регулярные выражения одинаково выразительны (они могут описывать одни и те же языки), между размерами представлений нет простой связи. Существуют DFA, для которых требуются регулярные выражения экспоненциального размера в количестве состояний, а также регулярные выражения, экспоненциально увеличивающиеся при преобразовании в DFA (даже при минимизации). Кроме того, минимизация размера регулярного выражения в принципе неразрешима, в отличие от минимизации состояний в DFA. (Существуют «приблизительно минимальные» алгоритмы, но они не изящны.)
В стандартной библиотеке Python нет пакета для выполнения этих задач. Плохие и защищенные от копирования реализации (иногда даже два в одном) изобилуют в Интернете; По некоторым причинам, почти все реализации, кажется, сделаны или студентами, которые все еще изучают любой язык, на котором они пишут, или учеными, которые думают, что их работа слишком драгоценна, чтобы делиться ими с открытым исходным кодом. В любом случае, предыдущая вспышка является примером того, почему SO не поощряет вопросы «найди мне ресурс»: они, как правило, привлекают взвешенные ответы, которые никому не особенно полезны (кроме, возможно, расчесывания зуда респондента).
Если вы собираетесь программировать, алгоритмы на самом деле довольно просты. Конструкция Томпсона для преобразования регулярных выражений в NFA должна составлять не более ста строк Python, а конструкция блока питания для создания DFA еще проще. Если у вас есть NFA-> DFA, вы можете выполнить минимизацию с помощью алгоритма Бжозовского, который тривиален: инвертируйте DFA, производящий NFA, уменьшите его обратно до DFA, а затем разверните и снова уменьшите. Непонятно, почему это работает, но это работает, и это одна строка кода, когда вы написали реверсор DFA, а это, в свою очередь, полдюжины строк.