VBA之正则表达式(45)-- 拆分材料和规格

实例需求:材料编码保存在A列中,现需要将其拆分为名称规格型号,分别保存再B列和C列。

物料编码存在如下几种形式,对应不同的拆分规则如下:

  • 名称+规格组合(无空格),例如:扁钢840635
  • 名称+规格数字,例如:上仓板1
  • 名称(不包含规格),例如:风口
  • 名称(末尾可能包含数字)+空格+规格,例如:钢管1 1/2*1540

示例代码如下。

复制代码
Sub Demo()
    Dim i As Long, strTxt As String, arrData
    Dim objRegExp As Object, objMatch As Object
    Dim c As Range: Set c = [a1].CurrentRegion
    arrData = c.Value
    Set objRegExp = CreateObject("vbScript.Regexp")
    With objRegExp
        .Global = True
        .Pattern = "^((?:\D+?(?:\d+ )*))([\d\*\/\.]+)"
        .IgnoreCase = True
        .Multiline = False
        For i = 2 To UBound(arrData)
            strTxt = arrData(i, 1)
            Set objMatch = objRegExp.Execute(strTxt)
            If objMatch.Count = 0 Then
                arrData(i, 2) = strTxt
            Else
                With objMatch(0)
                    arrData(i, 2) = Trim(.SubMatches(0))
                    arrData(i, 3) = .SubMatches(1)
                End With
            End If
        Next
    End With
    c.Value = arrData
    Set objRegExp = Nothing
    Set objMatch = Nothing
End Sub

【代码解析】

第4行代码获取前三列的数据区域。

第5行代码将数据表加载到数组中。

第6行代码创建正则对象。

第9行代码设置正则匹配模式。

正则表达式 说明
\D+? 匹配一个或者多个非中文字符,即材料名称
(?:\d+ )* 匹配材料名称中最后可能包含的数字,?:说明括号内为非提取组
([\d\*\/\.]+) 匹配一个或者多个规格字符,包含数字,型号,反斜杠和小数点

第12~24行代码循环遍历处理每行数据。

第13行代码将第一列数据保存到变量中。

第14行代码执行正则匹配。

第15行代码判断是否匹配成功。

如果没有匹配成功,第16行代码填写"名称"。

如果匹配成功,第19和20行代码分别填写"名称"和"规格型号"。

第25行代码将结果写入到工作表中。

相关推荐
2601_962382431 天前
Python自动化办公实战指南:从入门到精通
数据清洗·python自动化办公·报表生成·文档处理·邮件分发
沙淘金数据服务4 天前
电商订单数据整合难题拆解:多源异构数据如何实现自动化治理?
大数据·人工智能·数据治理·数据清洗·电商·外贸
yume_sibai4 天前
正则表达式完全指南(基础语法 + 实战应用 + 性能优化 + 最佳实践)
开发语言·正则表达式·c#
东莞市云毅网络有限公司5 天前
企业非结构化资料拆分成可引用片段:一套能跑通的预处理流水线
python·数据清洗·rag·企业知识库·文档解析
研☆香5 天前
js中使用的正则表达式
开发语言·javascript·正则表达式
2601_9622935310 天前
浅学python | 正则表达式集锦
正则表达式·字符串匹配·python知识·浅学python·ip地址检查
2601_9622955810 天前
Python中正则表达式的知识汇总分享
python·正则表达式·模块·语法·匹配
Patrick在香港10 天前
把 Claude 塞进 pandas 管道:7 条脏地址实测,5 条自动清洗、2 条被闸门拦下
python·pandas·etl·claude·数据清洗
启观川10 天前
Python基础-第 16 章 综合案例:客户信息管理系统
开发语言·笔记·python·正则表达式
2601_9622940510 天前
Python 操作 Word:如何查找、替换和批量修改文本
python·正则表达式·word·文档处理·查找替换