检查两个Python正则表达式模式是否等效

检查两个Python正则表达式模式是否等效,python,regex,Python,Regex,我想在模式下编写一个正则表达式,但我不确定是否会添加无误的详细部分 我记得,理论上,两个正则表达式(至少没有反向引用)的等价性可以通过生成它们的自动机并试图找到一个图双射来找到。但我看不到比较正则表达式的实例方法 有没有一种方法可以生成正则表达式的自动机,或者直接比较它们,最好是与标准库进行比较 (我已经决定使用不同的解决方案来解决我的问题,但这仍然是我感兴趣的。)您可以使用未记录的re.DEBUG功能: >>> r1 = re.compile("foo[bar]baz", r

我想在模式下编写一个正则表达式,但我不确定是否会添加无误的详细部分

我记得,理论上,两个正则表达式(至少没有反向引用)的等价性可以通过生成它们的自动机并试图找到一个图双射来找到。但我看不到比较正则表达式的实例方法

有没有一种方法可以生成正则表达式的自动机,或者直接比较它们,最好是与标准库进行比较


(我已经决定使用不同的解决方案来解决我的问题,但这仍然是我感兴趣的。)

您可以使用未记录的
re.DEBUG
功能:

>>> r1 = re.compile("foo[bar]baz", re.DEBUG)
literal 102
literal 111
literal 111
in
  literal 98
  literal 97
  literal 114
literal 98
literal 97
literal 122
>>> r2 = re.compile("""foo   # foo!
...                    [bar] # b or a or r!
...                    baz   # baz!""", re.VERBOSE|re.DEBUG)
literal 102
literal 111
literal 111
in
  literal 98
  literal 97
  literal 114
literal 98
literal 97
literal 122

如果输出是相同的,
r1
r2
也是相同的。

文件化程度低于文件化程度。另外,在尝试编写一个函数来检查正则表达式的相等性时,我发现,由于
re.compile
缓存其结果,
re.DEBUG
可能不会给出输出。这不是正则表达式的理论等价性,所以这只适用于
re.VERBOSE
更改。下面是我的实现,并附有示例:(请随意将此注释添加到您的答案中。)我对
re
没有保存调试输出感到失望,我不能强迫重新编译使用“代码> Re.Debug ./CODE”。提出了一个关于“代码> Re.Debug ./COD>不强制重新编译的问题:@ LeeWangCube:考虑增加一个bug来添加这样一个方法,比如<代码> RE。编译(UR'YADA)。等效(R.Cype(UR'YADA))< /C>::您是指一个特征请求吗?