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
相关产品推荐
相关产品推荐

