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

时间:2014-01-28 06:16:17

标签: python regex

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

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

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

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

1 个答案:

答案 0 :(得分: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

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