3

我可以在 difflib 中使用正则表达式吗?

具体来说,我想做:

difflib.context_diff(actual, gold)

实际是:

[master 92a406f] file modified

黄金是:

\[master \w{7}\] file modified
4

3 回答 3

3

看起来您的意思是要忽略92a406f实际文件的一部分。您应该编写一个使用正则表达式的擦洗器来擦洗您要忽略的部分:

actual = re.sub(r"\[master \w{7}\]", "[master *******]", actual)

然后存储擦洗过的黄金文件。然后,您可以使用标准 difflib 将擦洗后的实际值与擦洗后的黄金进行比较。

于 2011-07-18T15:21:02.487 回答
3

如果您真的想追求基于正则表达式的差异,那么您可以创建自己的__eq__基于正则表达式匹配定义的类似字符串的对象,并在这些对象的序列上使用 difflib。不过,我不会推荐它。

于 2011-07-18T15:26:47.623 回答
2

我刚刚做的是:用副本替换 difflib 的 find_longest_match 函数,但是通过调用检查来替换 == 调用,当事情不相等时尝试将左侧解释为正则表达式(并在任何错误时返回 true,例如当它不是有效的正则表达式时)。

我将它用于单元测试预期的输出匹配,到目前为止它工作得非常好。

于 2012-08-22T15:49:56.603 回答