如何从含数字的名称中提取格式不固定的版本号?
解决方案
核心逻辑
版本号的判定规则:结尾连续的、由纯数字段通过连字符连接的片段,其余部分为参考ID。即从最后一段开始往前检查,所有连续的纯数字段(仅含0-9)拼接起来就是版本号;若最后一段不是纯数字,则标记为(No version)。
Excel公式实现(适用于Excel 365及以上版本)
假设完整名称在单元格A2,以下公式分别提取版本号和参考ID:
1. 提取版本号(单元格B2)
=LET( parts, TEXTSPLIT(A2, "-"), total_parts, COUNTA(parts), rev_seq, SEQUENCE(total_parts,,total_parts,-1), is_num_part, BYROW(INDEX(parts, rev_seq), LAMBDA(x, ISNUMBER(--x))), first_non_num, MATCH(FALSE, is_num_part, 0), version_part_count, IFERROR(first_non_num-1, total_parts), IF(version_part_count=0, "(No version)", TEXTJOIN("-", TRUE, INDEX(parts, SEQUENCE(version_part_count, total_parts-version_part_count+1)))) )
2. 提取参考ID(单元格C2)
=LET( original_parts, TEXTSPLIT(A2, "-"), version_parts, TEXTSPLIT(B2, "-"), IF(B2="(No version)", A2, TEXTJOIN("-", TRUE, INDEX(original_parts, SEQUENCE(COUNTA(original_parts)-COUNTA(version_parts))))) )
公式逻辑说明
版本号公式:
TEXTSPLIT(A2, "-"):将完整名称按连字符拆分为分段数组rev_seq:生成倒序索引,从最后一段开始往前检查每一段is_num_part:判断每一段是否为纯数字(ISNUMBER(--x)可识别纯数字字符串)first_non_num:找到第一个非纯数字段的位置,确定连续纯数字段的数量- 最后拼接连续纯数字段为版本号,若无则返回
(No version)
参考ID公式:
- 若无版本号,直接返回原名称;否则截取版本号之前的所有分段,用连字符拼接成参考ID
验证示例
以你提供的测试数据为例,公式可完美输出期望结果:
| 完整名称 | 版本号 | 参考ID |
|---|---|---|
| abc-defg-hijklmn-opqr--stw-xy-zabc-1-2-3-4567890123456 | 1-2-3-4567890123456 | abc-defg-hijklmn-opqr--stw-xy-zabc |
| dcba-ijhg-lmn-opqrs-tuvwxy-za | (No version) | dcba-ijhg-lmn-opqrs-tuvwxy-za |
| ab-cde-zyx-dfghjkld--az-qwer-3-2-1 | 3-2-1 | ab-cde-zyx-dfghjkld--az-qwer |
内容的提问来源于stack exchange,提问作者Kelly Ackary
相关产品推荐
相关产品推荐

