Excel新手求助:提取指定规则的字母数字/数字子串方法
解决Excel中提取code/codes后字母数字子串的需求
方法1:使用Excel 365/2021正则函数(推荐)
如果你的Excel版本支持REGEXEXTRACT等正则函数,直接用以下公式(假设目标文本在单元格A1):
=TEXTJOIN(";",,FILTER(REGEXEXTRACT(A1,"(?i)(?:code|codes)[^\w]*(\w+)",SEQUENCE(100)),NOT(ISERROR(REGEXEXTRACT(A1,"(?i)(?:code|codes)[^\w]*(\w+)",SEQUENCE(100))))))
公式说明:
(?i):开启不区分大小写匹配,兼容CODE/Codes等任意大小写形式的关键词。(?:code|codes):匹配code或codes(非捕获组,避免干扰后续提取)。[^\w]*:匹配关键词和目标子串之间的任意非字母数字字符(包括空格、冒号、括号、下划线等)。(\w+):捕获后续连续的字母数字子串(即需要提取的内容)。SEQUENCE(100):指定最多提取100个匹配结果,可按需调整数量。FILTER:过滤无匹配时产生的错误值。TEXTJOIN:将多个匹配结果用;分隔拼接。
方法2:旧版Excel使用VBA自定义函数
若Excel版本不支持正则函数,通过VBA创建自定义函数:
- 按
Alt + F11打开VBA编辑器。 - 右键当前工作簿,选「插入」→「模块」。
- 粘贴以下代码:
Function ExtractCodes(inputText As String) As String Dim regex As Object Dim matches As Object Dim match As Object Dim resultStr As String Set regex = CreateObject("VBScript.RegExp") regex.Global = True '开启全局匹配,提取所有符合条件的子串 regex.IgnoreCase = True '不区分大小写 regex.Pattern = "(code|codes)[^\w]*(\w+)" '匹配规则 Set matches = regex.Execute(inputText) resultStr = "" For Each match In matches If resultStr <> "" Then resultStr = resultStr & ";" resultStr = resultStr & match.SubMatches(1) '提取捕获的目标子串 Next match ExtractCodes = resultStr End Function
- 返回Excel界面,在单元格输入
=ExtractCodes(A1)即可调用。
示例验证
- 输入
test string→ 输出为空 - 输入
another test string CODE 6657Yuyt9 and codes: 9989→ 输出6657Yuyt9;9989 - 输入
with code bracket the (Code A011261)→ 输出A011261
内容的提问来源于stack exchange,提问作者Zeren
相关产品推荐
相关产品推荐

