VBA之正则表达式(39)-- 提取规格数据(2/2)

news2024/9/22 15:47:46

实例需求:A列为某产品名称,现需要提取其中的规格数据,具体规则如下:

  • 规格数据以如下关键字开头:RO、RE、SQ、SD、QD、OB、HX、ET、QR、D2
  • 规则数据可能有多段(截图中红色部分)
  • 提取规格数据之后,乘号(即x)替换为星号
  • R(或者r)之前增加星号
  • 剔除无意义的0和小数点,如C6和C15所示。

提取的结果如C列所示。

在这里插入图片描述

在上一篇博客中(请移步:VBA之正则表达式(39)-- 提取规格数据(1/2))已经实现了前4个规则。接下来看一下如何实现最后一个规则。

先来观察一下数据,需要剔除的无意义0和小数点,有如下几种情况:

规格字符串说明
2.2*5.2+0.20剔除末尾的0
5*40+1.0剔除末尾的0和小数点
Sub RegExpDemo2()
    Dim objRegEx As Object
    Set objRegEx = CreateObject("vbscript.regexp")
    With objRegEx
        .Global = True
        .Pattern = "(?:RO|RE|SQ|SD|QD|OB|HX|ET|QR|D2)\s([\d\.x]+)[\sm]*(([\+]*\d+\.\d*[1-9])0*|([\+]*\d+)\.0|([rR]\d+\.\d))*|."
        Set datarng = [a1].CurrentRegion
        arr = datarng.Value
        For r = 1 To UBound(arr)
            rep1 = .Replace(arr(r, 1), "$1$3$4$5")
            rep2 = Replace(rep1, "x", "*")
            rep3 = Replace(UCase(rep2), "R", "*R")
            arr(r, 1) = "'" & rep3
        Next
    End With
    datarng.Offset(0, 4).Value = arr
    Set objRegEx = Nothing
End Sub

【代码解析】
与上一篇博客相同的代码这里不再赘述。
第6行代码设置匹配规则,其中前半部分也是相同的,只需要讲解(([\+]*\d+\.\d*[1-9])0*|([\+]*\d+)\.0|([rR]\d+\.\d+))*|.
|正则表达式|说明|示例|
|:-|:-|:-|:-|
|([\+]*\d+\.\d*[1-9])0*|匹配加号开头(可以没有),一个或者多个数字,跟随小数点,之后一个或者多个数字(最后一个数字非0),之后可以跟随任意个0|提取+0.20中的+0.2|
|([\+]*\d+)\.0|匹配加号开头(可以没有),一个或者多个数字,跟随小数点和0|提取+1.0中的+1|
|([rR]\d+\.\d+)|匹配r或者R开头,一个或者多个数字,跟随小数点,之后为一个或者多个数字|匹配R/r数据|

如果数据中R部分也包含无意义0,那么将需要参照上表中的方法,进行进一步低拆分。

最终匹配结果和提前组如下图所示,匹配组4和5实现了剔除无意义0。

在这里插入图片描述

运行示例代码提取的规格数据保存在E列中,如下图所示。

在这里插入图片描述


对于复杂的数据提取规则,不妨分成几个部分逐步实现,这样便于测试与发现问题。本博客提供的正则规则也只是一种实现方式,欢迎读者提供更优秀的实现方式。


测试数据如下:

Fump 241 Chunp Size1 SH-QR 18x18r0.3 Rooft. 1°bt
Fump Chunp Size 2A QR 6.3x36.6 R0.8 BT1° RT TINC
Fump Chunp Size 1 RO 28mm TINC RoofTop
Fump Chunp Size 1 RO 6mm TINC
Lutra Chunp "A" SH-RE 2.2x5.2mm
TKH ide "A" SH-RE 2.2x5.2mm +0.20 SF
Lutra Chunp "A" SH-RE 1.2x5.5mm stubby
Lutra Stripper "A" SH-RE 1.2x5.5mm
TKH ide "A" SH-RE 1.2x5.5mm +0.20 SF
Lutra Chunp "A" RO 6.1mm
TKH ide "A" RO 6.1mm +0.20 SF
Lutra Stripper "B" RE 2x10mm
Fump ide Size 1 RO 5mm +0.6 SP
Fump ide Size 1 SH-HX 7.1mm +0.3 SP
Fump ide Size 2 SH-OB 5x40mm +1.0 SP
Fump Chunp HD Size1 SH-OB 8x30mm RT 1°BT
Fump ide Size 2 HD SH-OB 8x30mm +1.85 SP
Fump Chunp HD Size1 SH-OB 5x30mm RT 1°BT
Lutra Chunp "B" SH-RE 1.5x15mm stubby
Lutra Stripper "B" SH-RE 1.5x15mm
TKH ide "B" SH-RE 1.5x15mm +0.20 SF
Lutra Chunp "B" SH-RE 5x20mm
TKH ide "B" SH-RE 5x20mm +0.20 SF
TKH ide "A" SH-RE 1.1x6mm +0.20 SF
Fump Chunp Size 2C RO 55mm RoofTop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot简单功能分析,静态资源访问和静态资源配置原理解析

目录 1、SpringMVC自动配置概览 2、简单功能分析 2.1、静态资源访问 1、静态资源目录 2、静态资源访问前缀 3、webjar 2.2、欢迎页支持 2.3、自定义 Favicon 2.4、静态资源配置原理 1、SpringMVC自动配置概览 官网Web (spring.io) Spring Boot provides auto-configur…

论文综述——UNIRE: A Unified Label Space for Entity Relation Extraction

UNIRE: A Unified Label Space for Entity Relation Extraction1 任务介绍2 UniRE模型3 实验4 总结1 任务介绍 过构建标签空间来对实体和关系进行联合抽取的方法。 实体关系抽取旨在提取文本中的实体并检测它们的实体类型,以及对每个实体对检测它们的关系。作者提…

MAX78000FTHR简单介绍与初次上手

特点 MAX78000FTHR是基于MAX78000的小型板微控制器单元(MCU)。 该 MCU 面向在边缘运行的人工智能 (AI) 应用程序。在这种情况下,“边缘”并不意味着技术的前沿(尽管这就是芯片);这意味着靠近需要它的地方…

vector对于自定义类型的操作(memcpy浅拷贝问题)

目录 如果对于不涉及资源管理的自定义类型的操作(Date): 对涉及资源管理类操作(String): 一、插入四个元素(代码正常编译没有任何资源泄露问题) 二、当插入第五个元素时&#xf…

【C++进阶】Map 和 Set(详解)

🌈欢迎来到C专栏~~Map 和Set (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&am…

【JavaScript】DOM 的概念、获取DOM元素和操作元素属性

文章目录【JavaScript】DOM 的概念、获取DOM元素和操作元素属性一. 概念二. DOM 操作(1) 获取DOM元素的方式1. document 获取元素方法2. 通过 HTML5 新增的方法获取案例:登录界面密码显示与隐藏(2) 读写元素内部的结构内容1. 改变元素节点里的内容2. 改变元素节点的…

操作系统的基本概念、功能、目标

文章目录🎀前言:本篇博客知识总览🪂操作系统所处位置📖操作系统的概念🎯操作系统的功能和目标🪅1.操作系统作为系统资源的管理者🪅2.操作系统作为用户与计算机硬件之间的接口🪅3.操作…

连接数据库和简单操作数据库

连接数据库和简单操作数据库JDBC程序编写步骤创建一个演员表数据库表的连接前置工作五种连接方式方式五的配置文件配置文件里面的内容通过JDBC进行对actor表操作。ideal执行后的结果数据库actor表结果JDBC程序编写步骤 1.注册驱动-加载Driver类 2.获取连接-得到Connection 3.执…

【阶段一】Python快速入门04篇:运算符、循环语句、条件语句与函数

本篇的思维导图: 运算符 算术运算符 算术运算就是常规的加、减、乘、除类运算。下表为基本的算术运算符及其示例。 描述 代码

【C++常用容器】STL基础语法学习map容器

目录 ●map基本概念 ●map构造和赋值 ●map大小和交换 ●map插入和删除 ●map查找和统计 ●map排序(map初始排序顺序为从小到大,用仿函数将其改为从大到小) ●map基本概念 map中的所有元素都是pair,pair中第一个元素为key&a…

【WeThinkIn出品】2022年度总结

Rocky Ding公众号:WeThinkIn写在前面 【WeThinkIn出品】栏目专注于分享Rocky的最新思考与经验总结,包含但不限于技术领域。欢迎大家一起交流学习💪 这篇文章发布的时候,应该已经是2023年了。在这里Rocky祝大家元旦快乐&#xff01…

前端最常用的几个线上设计网站

文章目录前言CoDesign 腾讯自研设计平台【墙裂推荐】蓝湖- 高效的产品设计协作平台【墙裂推荐】zeplin Deliver on the promise of design 【国外,不推荐】总结前言 随着IT技术的不断进步,很多团队都将很对线下工作转移到了线上,不仅便捷&a…

Ae 效果详解:毛边

Ae菜单:效果/风格化/毛边Effects/Stylize/Roughen Edges毛边 Roughen Edges效果可使得 Alpha 通道的边缘变粗糙,可以为图像添加各种边缘效果。通过分形影响改变边缘样式,并可增加颜色以模拟铁锈和其他类型的腐蚀。此效果可为文本或图形提供自…

算法之数组常见题目

数组是存储在连续内存空间上的相同类型数据的集合。在数组中可以方便地通过下标索引的方式获取对应的数据。 需要注意的是: 数组的下标都是从0开始的。数组在内存空间是连续的,所以删除或者增添元素时难免要移动其他元素的地址,只能覆盖。 …

【Kubernetes | Pod/容器】如何修改 Pod 中容器的守护进程

目录题1. 环境设定1.1 创建名为 vmware-nginx 的 Pod2. 查看容器默认守护进程2.1 查看容器所在节点2.2 查看容器ID2.3 查看容器中运行的进程信息3. 修改容器默认守护进程3.1 类比 Docker3.2 修改 YAML 文件改变默认守护进程参数说明4. 验证4.1 删除旧的 vmware-nginx.yaml 容器…

质性分析软件nvivo的学习(一)

1、软件安装: 科研也是需要投资的,建议淘宝购买软件,价格60米。 2、软件基础使用说明: 说明:以下笔记来源都是通过B站视频自学总结的,您可以选择通过下面的B站视频学习,也可以选择通过我总结的内容速学。…

(Week 9)图论(C++,Dijkstra,Floyd)

文章目录【深基18.例3】查找文献(C,图的遍历)题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1解题思路:【模板】floyd(C)题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样…

内核内存管理

1.内核内存管理框架 内核将物理内存等分成N块4KB,称之为一页,每页都用一个struct page来表示,采用伙伴关系算法维护 内核地址空间划分图: 3G~3G896M:低端内存,直接映射 虚拟地址 3G 物理地址 细分为&a…

我国软件供应链安全现状学习分析整理分享 附完整下载地址

声明 本文是学习2021年中国软件供应链安全分析报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 一、前言 数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一&#…

MATLAB | 绘图复刻(五) | 带树状图的环形热图

本期教大家如何绘制带树状图的环状热图,要复刻的图片长这样: 复刻效果: 需要安装Statistics and Machine Learning Toolbox即统计与机器学习工具箱!!! 需要安装Statistics and Machine Learning Toolbox即…