检查两个Python正则表达式模式是否相同

lee*_*ewz 9 python regex

我想在re.VERBOSE模式下编写一个正则表达式,但我不相信我会毫无错误地添加详细部分.

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

有没有办法生成正则表达式的自动机或直接比较它们,最好是标准库?

(我已经决定对我的问题采用不同的解决方案,但我仍然感兴趣.)

Tim*_*ker 6

您可以使用未记录的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
Run Code Online (Sandbox Code Playgroud)

如果输出是相同的,r1并且r2是相同的为好.