如何从联想产品列表单元格中提取符合规则的10位产品编号?
解决方案
方案1:Excel动态数组公式(适用于Excel 365/2021及以上版本)
使用组合公式提取符合规则的编号,公式如下:
=LET( raw, SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"("," "),")"," "),"_"," "), parts, TEXTSPLIT(raw, " ", , TRUE), filtered, FILTER(parts, LEN(parts)=10 AND ISNUMBER(SEARCH("[A-Za-z]",parts)) AND ISNUMBER(SEARCH("[0-9]",parts))), IFERROR(INDEX(filtered,1),0) )
公式说明:
raw:将括号、下划线替换为空格,确保被干扰符号包裹的编号能被单独拆分parts:按空格拆分文本并过滤空值,得到所有独立内容片段filtered:筛选出长度为10、同时包含字母和数字的片段IFERROR(INDEX(filtered,1),0):返回第一个符合条件的编号,无匹配时返回0
方案2:VBA自定义函数(兼容所有Excel版本)
若Excel版本不支持动态数组,可创建自定义函数实现提取:
- 按
Alt+F11打开VBA编辑器 - 插入新模块,粘贴以下代码:
Function GetLenovoSN(rng As Range) As String Dim regEx As Object Dim matches As Object Set regEx = CreateObject("VBScript.RegExp") With regEx .Global = True .Pattern = "\b(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{10}\b" End With Set matches = regEx.Execute(rng.Value) If matches.Count > 0 Then GetLenovoSN = matches(0).Value Else GetLenovoSN = "0" End If End Function
- 返回Excel界面,在目标单元格输入
=GetLenovoSN(A1)即可提取对应编号
正则规则说明:
\b:匹配单词边界,避免从长字符串中截取部分内容(?=.*[A-Za-z]):确保内容包含至少一个字母(?=.*[0-9]):确保内容包含至少一个数字[A-Za-z0-9]{10}:匹配10位纯字母数字组合
验证结果
| 输入 | 返回结果 |
|---|---|
| LEGION T5 (90SV003WGE) | 90SV003WGE |
| FLEX 5 (82R700BEGE) XKLUSIV | 82R700BEGE |
| V17-IRU 83A2001NGE | 83A2001NGE |
| LENOVO E16 G1 21JT000HGE_WIN 11 | 21JT000HGE |
| LENOVO THINKCENTRE M70T 12Q6000AGE I7-12 | 12Q6000AGE |
| IDEAPAD 3 17ALC6 | 0 |
内容的提问来源于stack exchange,提问作者suraround
相关产品推荐
相关产品推荐

