检查两个Python Regex模式是否等效



我想在re.VERBOSE模式下编写正则表达式,但是我不确定我会在没有错误的情况下添加冗长的部分。

我记得,从理论上讲,可以通过生成其自动机并尝试找到图形射击的两个等级(至少没有反应)的等效性(至少没有反应)。但是我看不到比较Regexes的实例方法。

是否有一种方法可以生成正则拨号的自动机,或者直接与标准库进行比较?

(我已经决定解决我的问题的一种不同的解决方案,但这对我来说仍然很感兴趣。)

您可以使用未记录的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

如果输出相同,r1r2也相同。

最新更新