Python difflib与正则表达式
我可以在difflib中使用正则表达式吗?
具体来说,我想做的是:
difflib.context_diff(actual, gold)
其中actual是:
[master 92a406f] file modified
而gold是:
\[master \w{7}\] file modified
3 个回答
2
我刚刚做的事情是:把difflib里面的find_longest_match函数替换成了一个复制版,不过把里面的==比较换成了一个检查。当两个东西不相等的时候,这个检查会尝试把左边的内容当作正则表达式来解释,如果出错了(比如说它不是一个有效的正则表达式),就返回true。
我用这个来做单元测试的预期输出匹配,到目前为止效果很好。
3
看起来你是想忽略文件中的92a406f
这一部分。你需要写一个清理工具,使用正则表达式来去掉你想忽略的部分:
actual = re.sub(r"\[master \w{7}\]", "[master *******]", actual)
然后把清理过的“金标准”文件保存下来。接着,你可以用标准的difflib来比较清理过的实际文件和清理过的“金标准”文件。
3
如果你真的想用正则表达式来做差异比较,那你可以自己创建一个类似字符串的对象,并根据正则匹配来定义 __eq__
方法,然后用 difflib 来处理这些对象的序列。不过,我不太推荐这样做。