Power BI如何基于代码列表从图纸编号列提取匹配代码?
图纸编号匹配与代码提取方案
Excel 处理方案
公式法(适合小批量数据)
如果代码列表在A1:A10,图纸编号在B1单元格,在C1输入以下数组公式(输入后按Ctrl+Shift+Enter触发),可提取当前图纸编号匹配的所有代码,用逗号分隔:
=TEXTJOIN(",",TRUE,IF(ISNUMBER(SEARCH($A$1:$A$10,B1)),$A$1:$A$10,""))
- 若需忽略大小写,保持用
SEARCH即可;若严格区分大小写,替换为FIND。 - 下拉公式可批量处理所有图纸编号。
Power Query 法(适合大批量数据)
- 将图纸编号和代码列表导入Power Query;
- 添加自定义列,输入M语言公式筛选匹配代码:
List.Select(代码列表, each Text.Contains([图纸编号], _))
- 将生成的列表列转换为文本列(用逗号分隔),最后加载回Excel。
Python 处理方案
基础遍历法(逻辑直观)
适合代码逻辑简单、数据量中等的场景:
# 示例数据 drawings = ["DWG-ABC-001", "DWG-XYZ-002", "DWG-DEF-003", "DWG-ABC-DEF-004"] codes = ["ABC", "DEF", "GHI"] # 批量匹配提取 result = [] for drawing in drawings: matched_codes = [code for code in codes if code in drawing] result.append({ "图纸编号": drawing, "匹配代码": ",".join(matched_codes) if matched_codes else "无匹配" }) # 输出结果 for item in result: print(f"{item['图纸编号']}: {item['匹配代码']}")
正则优化法(高效处理大批量/含特殊字符的代码)
当代码包含正则特殊字符(如+、*)或需优先匹配长代码时,用正则更高效:
import re drawings = ["DWG-ABC-001", "DWG-XYZ-002", "DWG-DEF-003", "DWG-ABC-DEF-004"] codes = ["ABC", "DEF", "AB", "GHI"] # 按代码长度降序排列,优先匹配长代码 sorted_codes = sorted(codes, key=len, reverse=True) # 转义特殊字符,构建正则模式 pattern = re.compile("|".join(re.escape(code) for code in sorted_codes)) result = [] for drawing in drawings: matched_codes = pattern.findall(drawing) # 去重(若同一图纸多次出现同一代码) unique_matched = list(set(matched_codes)) result.append({ "图纸编号": drawing, "匹配代码": ",".join(unique_matched) if unique_matched else "无匹配" }) for item in result: print(f"{item['图纸编号']}: {item['匹配代码']}")
注意事项
- 大小写匹配:若需忽略大小写,Excel保持
SEARCH;Python可在匹配时转换为小写(code.lower() in drawing.lower())或给正则加re.IGNORECASE参数。 - 代码重叠:若存在包含关系的代码(如
AB和ABC),需按业务需求确定匹配优先级,正则方案中按长度降序排列可优先匹配长代码。
内容的提问来源于stack exchange,提问作者adam Wadsworth
相关产品推荐
相关产品推荐

