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

Python正则匹配字符串首尾部分进行对比的问题

解决Python中字符串对比的误判问题

要过滤掉中间可变数字导致的误判差异,核心思路是提取每个字符串的关键标识(固定开头+结尾数值),基于关键标识做对比,而非直接对比完整字符串。具体实现步骤如下:

1. 提取关键标识

通过正则精准捕获固定开头(V-1\ZDS\R\EMBO-20)和结尾数值,忽略中间的可变数字,生成用于对比的“关键键”:

import re

# 正则匹配固定开头、跳过中间数字、捕获结尾数值
key_pattern = re.compile(r"(V-1\\ZDS\\R\\EMBO-20)-\d+:(.*)")

def extract_key(s):
    match = key_pattern.match(s)
    if match:
        # 拼接固定开头和结尾数值作为关键键
        return f"{match.group(1)}:{match.group(2)}"
    # 对不符合格式的字符串,直接返回原内容作为键
    return s

2. 基于关键键做差异对比

修改差异逻辑,先为两个列表的字符串生成“键-原字符串”映射,再对比键的唯一性,仅保留在另一个列表中无相同关键键的原字符串:

def get_filtered_diff(list1, list2):
    # 构建列表1的键-原字符串映射
    map1 = {}
    for s in list1:
        key = extract_key(s)
        map1.setdefault(key, []).append(s)
    
    # 构建列表2的键-原字符串映射
    map2 = {}
    for s in list2:
        key = extract_key(s)
        map2.setdefault(key, []).append(s)
    
    # 找出仅存在于单个列表中的关键键
    unique_keys1 = set(map1.keys()) - set(map2.keys())
    unique_keys2 = set(map2.keys()) - set(map1.keys())
    
    # 收集对应的原字符串作为最终差异结果
    diff_result = []
    diff_result.extend([s for key in unique_keys1 for s in map1[key]])
    diff_result.extend([s for key in unique_keys2 for s in map2[key]])
    
    return diff_result

3. 使用示例

# 测试用的两个字符串列表
list_a = ["V-1\\ZDS\\R\\EMBO-20-1:24", "V-1\\ZDS\\R\\EMBO-20-2:30"]
list_b = ["V-1\\ZDS\\R\\EMBO-20-6:24", "V-1\\ZDS\\R\\EMBO-20-3:35"]

# 获取过滤后的差异
filtered_diff = get_filtered_diff(list_a, list_b)
print(filtered_diff)
# 输出结果:['V-1\\ZDS\\R\\EMBO-20-2:30', 'V-1\\ZDS\\R\\EMBO-20-3:35']

此时,V-1\ZDS\R\EMBO-20-1:24和V-1\ZDS\R\EMBO-20-6:24因关键键相同,会被判定为非差异项,不会出现在结果中。

内容的提问来源于stack exchange,提问作者aimeekb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:20:51