You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DeepDiff的exclude_regex_paths时误排除所有差异的问题求助

使用DeepDiff的exclude_regex_paths时误排除所有差异的问题求助

你遇到的问题核心是正则表达式的写法错误——你传递的"['seqid']"被解析成了正则的「字符类」,而非匹配完整的['seqid']路径片段,导致所有路径都被意外排除,最终得到空的diff结果。

问题根源

在正则表达式中,[]是特殊语法,表示「字符类」,匹配括号内的任意单个字符。你写的"['seqid']"会匹配任何包含'、s、e、q、i、d、]的路径——而DeepDiff生成的所有路径(比如root['record1']['value'])都包含'和],相当于所有差异路径都被命中排除,自然看不到任何value的变化。

修复方案

要正确匹配seqid字段的完整路径,你需要对正则中的特殊字符[和]进行转义,或者使用原始正则字符串编写正确的匹配规则:

方案1:匹配所有包含['seqid']的路径

使用转义后的正则,匹配任意包含['seqid']的完整路径:

diff = DeepDiff(data1, data2, exclude_regex_paths=r".*\['seqid'\]")
  • r"" 表示原始字符串,避免Python解析转义字符
  • .* 匹配路径中['seqid']之前的任意内容(比如root['record1'])
  • \[ 和 \] 转义方括号,确保匹配字面量的[和]

方案2:精准匹配以seqid为键的路径

如果想更精准地只匹配seqid字段本身的路径,可以用$锚定结尾:

diff = DeepDiff(data1, data2, exclude_regex_paths=r"\['seqid'\]$")

$表示正则匹配到字符串结尾,确保只命中['seqid']作为最后一个路径片段的情况(也就是seqid字段的路径)。

修复后效果

修改后的代码运行后,会输出你期望的结果:

{'values_changed': {"root['record1']['value']": {'new_value': 3, 'old_value': 1}, "root['record2']['value']": {'new_value': 4, 'old_value': 2}}}

完美排除了seqid的差异,同时保留了value的变化。

额外提示

如果需要排除多个规则的路径,exclude_regex_paths也支持列表格式:

diff = DeepDiff(data1, data2, exclude_regex_paths=[r".*\['seqid'\]", r".*\['other_field'\]"])

备注:内容来源于stack exchange,提问作者Cornelius Roemer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:38:00