我可以在 difflib 中使用正则表达式吗?
具体来说,我想做:
difflib.context_diff(actual, gold)
实际是:
[master 92a406f] file modified
黄金是:
\[master \w{7}\] file modified
看起来您的意思是要忽略92a406f
实际文件的一部分。您应该编写一个使用正则表达式的擦洗器来擦洗您要忽略的部分:
actual = re.sub(r"\[master \w{7}\]", "[master *******]", actual)
然后存储擦洗过的黄金文件。然后,您可以使用标准 difflib 将擦洗后的实际值与擦洗后的黄金进行比较。
如果您真的想追求基于正则表达式的差异,那么您可以创建自己的__eq__
基于正则表达式匹配定义的类似字符串的对象,并在这些对象的序列上使用 difflib。不过,我不会推荐它。
我刚刚做的是:用副本替换 difflib 的 find_longest_match 函数,但是通过调用检查来替换 == 调用,当事情不相等时尝试将左侧解释为正则表达式(并在任何错误时返回 true,例如当它不是有效的正则表达式时)。
我将它用于单元测试预期的输出匹配,到目前为止它工作得非常好。