2014-01-28 94 views
7

我想在re.VERBOSE模式下編寫正則表達式,但我不確定是否會添加冗餘部分而沒有錯誤。檢查兩個Python正則表達式模式是否相同

我記得在理論上,兩個正則表達式(至少沒有反向引用)的等價性可以通過生成它們的自動機並試圖找到一個圖雙射來找到。但是我沒有看到用於比較正則表達式的實例方法。

有沒有辦法生成正則表達式的自動機或直接比較它們,最好是與標準庫?

(我已經決定了不同的解決我的問題,但是這仍然是我感興趣的。)

回答

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也是相同的。

+0

比文件記錄下的文件更多。另外,在試圖寫一個函數來檢查正則表達式的相等性時,我發現由於're.compile'緩存了它的結果,'re.DEBUG'可能不會輸出。而且這不是正則表達式的理論等價,所以這隻適用於're.VERBOSE'的變化。這裏是我的實現,並帶有示例:http://pastebin.com/DeCWLmF8(可隨意將此評論添加到您的答案中。) – leewz

+0

我很失望,'re'不保存調試輸出,而且我不能用're.DEBUG'強制重新編譯。 – leewz

+1

提出了一個關於're.DEBUG'的問題,不要強制重新編譯:http://bugs.python.org/issue20426 – leewz

相關問題