如何定位字符串中首个数字位置并拆分提取ID中的数字段
固定格式ID提取纯数字段实现方案
已知规则前提
- ID固定由三部分拼接,无例外情况:
- 固定客户段前缀:
ABC_ - 地理标识段:仅包含非数字字符,长度不固定,常见取值如UK、CHR、I
- 目标数字段:仅包含0-9数字,长度不固定
- 固定客户段前缀:
- 合法ID示例:
ABC_UK1234567、ABC_CHR98765、ABC_I123
原有方案问题说明
原生InStr函数不支持字符范围匹配,无法直接识别任意数字,通过OR语句拼接0-9每一个数字的匹配条件写法冗余、可维护性差,不推荐使用。
可行实现方案
方案1:正则匹配(代码最简洁)
直接通过正则规则匹配固定结构,提取数字段即可,适配所有合法ID格式:
Function GetIdNumPart(idStr As String) As String Dim reg As Object Set reg = CreateObject("VBScript.RegExp") reg.Pattern = "^ABC_\D+(\d+)$" If reg.Test(idStr) Then GetIdNumPart = reg.Execute(idStr)(0).SubMatches(0) End If End Function
调用方式:直接传入目标ID字符串即可返回纯数字部分,例如执行GetIdNumPart("ABC_UK1234567")会返回1234567。
方案2:逐字符遍历(无需依赖正则对象)
因为ID结构固定,前缀ABC_长度为4,从第5位开始遍历找到第一个数字的位置,直接截取后续所有内容即可:
Function GetIdNumPartNoRegex(idStr As String) As String Dim i As Long, numStart As Long numStart = 0 ' 从前缀后的第一个字符开始遍历 For i = 5 To Len(idStr) If IsNumeric(Mid(idStr, i, 1)) Then numStart = i Exit For End If Next If numStart > 0 Then GetIdNumPartNoRegex = Mid(idStr, numStart) End Function
两种方案都可以直接在Excel VBA、Access VBA环境下使用,因为ID格式严格无例外,不会出现截取错误。
内容的提问来源于stack exchange,提问作者DVEF
相关产品推荐
相关产品推荐

