我想以re.VERBOSE
模式编写正则表达式,但我不确定是否能够正确添加详细内容。
我记得理论上,可以通过生成它们的自动机并尝试查找图形双射来找到两个正则表达式(至少没有反向引用)的等价性。但是我看不到比较正则表达式的实例方法。
是否有一种方法可以生成正则表达式的自动机或直接进行比较,最好使用标准库?
(我已经决定采用不同的解决方案解决我的问题,但这仍然很有趣。)
我想以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
r1
和r2
也是相同的。
re.compile
缓存其结果,re.DEBUG
可能不会输出。而且这并不是正则表达式的理论等价,因此这仅适用于re.VERBOSE
更改。这是我的实现,附有示例:http://pastebin.com/DeCWLmF8(请随意从此评论中添加到您的答案中。) - leewzre
不能保存调试输出,也无法通过re.DEBUG
强制重新编译。 - leewzre.DEBUG
未强制重新编译的问题:http://bugs.python.org/issue20426 - leewzre.compile(ur'yada').equivalent(re.compile(ur'yada'))
:) - Mr_and_Mrs_D