使用Power Query按最小长度要求从混合文本中提取数字编码的求解
Power Query 提取纯数值编码优化方案
现有代码问题说明
原逻辑采用「替换特殊字符→拆分字符串→提取所有数字→过滤长度」的路径,会将被特殊字符分隔的多段数字拼接为一个字符串,导致0102646v2.0被错误识别为010264620。
优化后完整代码
无需提前替换任何特殊字符,直接通过正则精准匹配目标编码,同时预留版本号提取扩展位:
let Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Input ", type text}}), // 匹配所有长度≥6位的连续纯数字串作为目标编码 #"提取目标编码" = Table.AddColumn(#"Changed Type", "目标编码", each Text.Combine( Text.Regex.Matches([#"Input "], "\d{6,}"), ", " ) ), // 后续需要提取版本号时,取消注释下方代码即可 // #"提取版本号" = Table.AddColumn(#"提取目标编码", "版本号", each // Text.Combine( // List.Transform( // Text.Regex.Matches([#"Input "], "[vV]\d+\.\d+"), // each Text.Replace(Text.Lower(_), "v", "") // ), // ", " // ) // ) in #"提取目标编码" // 启用版本号提取时,注释上一行,取消注释下一行 // #"提取版本号"
逻辑说明
- 核心匹配规则
\d{6,}代表连续出现6次及以上的数字字符,完全符合「纯数值、长度不低于6位」的编码要求,非连续的数字会被自动拆分,不会出现拼接错误 - 版本号提取规则匹配
v/V开头的数字.数字格式字符串,自动去除前缀v后输出,同一条数据存在多个编码/版本号时,默认用逗号分隔
测试结果验证
针对你提供的测试用例,输出效果如下:
| 输入 | 目标编码 | 版本号(启用后输出) |
|---|---|---|
| 3159087 v1.0 | 3159087 | 1.0 |
| #8102368 V3.0 (Shine and ProtectR18) | 8102368 | 3.0 |
| 0102646v2.0 (Fresh Cotton) | 0102646 | 2.0 |
| TDS# 3129801 V1.0 GPA Code#3123402 | 3129801, 3123402 | 1.0 |
| FF3112964 0.1 FF3145524 0.1_3152912 0.1 | 3112964, 3145524, 3152912 | 无 |
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

