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

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 法(适合大批量数据)

  1. 将图纸编号和代码列表导入Power Query;
  2. 添加自定义列,输入M语言公式筛选匹配代码:
List.Select(代码列表, each Text.Contains([图纸编号], _))
  1. 将生成的列表列转换为文本列(用逗号分隔),最后加载回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:15:38