我想以 re.VERBOSE 模式编写一个正则表达式,但是我不确定是否会添加详细部分而不会出现错误。

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

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

(我已经决定要解决我的问题,但是我仍然对此感兴趣。)

最佳答案

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

关于python - 检查两个Python正则表达式模式是否等效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21398251/

10-11 17:58