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

news2024/11/15 19:51:29

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

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

提取的结果如C列所示。

在这里插入图片描述

这个需求略显复杂,直接写一个完整的正则有些难度,当然肯定有高手可以一气呵成,为了便于讲解,先忽略最后剔除数字的规则。

示例代码如下:

Sub RegExpDemo_1()
    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]*([rR\+]*[\d.]+)*|."
        Set datarng = [a1].CurrentRegion
        arr = datarng.Value
        For r = 1 To UBound(arr)
            rep1 = .Replace(arr(r, 1), "$1$2")
            rep2 = Replace(rep1, "x", "*")
            rep3 = Replace(UCase(rep2), "R", "*R")
            arr(r, 1) = "'" & rep3
        Next
    End With
    datarng.Offset(0, 3).Value = arr
    Set objRegEx = Nothing
End Sub

【代码解析】
第3行代码创建正则表达式对象。
第5行代码设置全局匹配。
第6行代码设置匹配规则。

正则表达式说明匹配字符
`(?:RORESQ
\s匹配一个白字符空格
([\d\.x]+)匹配一个或者多个如下字符:数字、小数点、小写字母x6.3x36.6
[\sm]*匹配任意多个如下字符:白字符或者m空格
[rR\+]*匹配任意多个如下字符:rR或者加号R
[\d.]+匹配任意一个或者多个数字可以包含小数点0.8
|.匹配其他任意字符,用于正则替换

Fump Chunp Size 2A QR 6.3x36.6 R0.8 BT1° RT TINC为例,最后一列展示匹配结果。
部分数据匹配结果如下图所示,从中可以看出匹配组1和2为需要提取的规格数据。
在这里插入图片描述

第7行代码获取A1单元格的当前数据区域。
第8行代码将数据读取到数组中。
第9~14行代码循环处理数据。
第10行代码使用匹配组1和2进行正则替换。
第11行代码将x替换星号。
第12行代码将规则转换为大写字符,然后在R之前增加星号。
第13行代码在规则数据其中增加半角引号,使得规格按文本数字格式写入到单元格中
第16行代码将提取的规则数据写入D列单元格中。

提数数据如下图所示,标记为绿色的单元格,表示与要求的结果一张,观察一下可以发现,不一致规格数据都需要剔除多余的数字,下一篇博客讲解如何实现这个规则。

在这里插入图片描述


测试数据如下:
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/134547.html

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

相关文章

数据模拟:利用Java模拟数据(姓名,邮箱,地址,电话等信息,时间,工资,1-10随机数)并存入mysql

学大数据分析的同学们在做数据分析时一般很难找到适合数据集,本文就来分享一下如何利用Java模拟数据,并将产生数据保存至mysql数据库中。 主要技术就是Java产生数据,利用mybatis存入mysql数据库 数据模拟项目1.数据库建表2.构建maven项目3.项…

初级指针【一】

指针是什么?2个要点:指针是内存中一个最小单元编号,也就是地址。平时口语中说的指针,通常指的是指针变量,是用来存放地址的变量。总结:指针就是地址,我们口语中说的指针指的是指针变量。指针的大…

ZooKeeper分布式协调服务(节点分类、事件监听、java集成)

文章目录前言安装启动相关概念操作节点事件监听java客户端前言 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xf…

序列化二叉树 - 剑指Offer困难

序列化二叉树 题目链接 请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为…

Alibaba Clould Tookit插件-IDEA实现一键部署

Alibaba Clould Tookit插件-IDEA实现一键部署 文章目录 前言说明使用 安装插件配置服务添加服务配置打包上传等内容 配置自动化配置命令配置文件上传前执行的命令 远程发布查看是否成功注意脚本 前言 本来一直使用jenkins后来坏掉了,别问,问就是老板…

(三分钟了解)处理外点(粗差)的方法--ransac和M估计

​ 编辑 添加图片注释,不超过 140 字(可选) 外点也即是我们所说的粗差,是因为在实际工程当中由于人为因素或者测量设备等因素造成的测量值与实际情况相比误差较大。然后从高斯分布的角度来说就是大于3σ以外的数据。本篇博客将…

STM32——OLED调试工具与显示屏

文章目录一、调试工具二、OLED简介三、硬件电路接线图四、OLED驱动函数五、源码OLED.cOLED.hOLED_Font.h一、调试工具 调试方式 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息 显示屏调试:直接将…

ip综合实验

目录实验要求分析开始实施1,前期工作2,缺省路由配置3,hdlc封装4,ppp封装的pap认证5,ppp封装的chap认证6,构建MGRE环境nhrp协议7,RIP使内网互通水平分割关闭实验要求分析 1,如图为实…

2023前端二面高频vue面试题集锦

vuex是什么?怎么使用?哪种功能场景使用它? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。vuex 就是一个仓库,仓库里放了很多对象。其中 state 就是数据源存放地,对应于一般 vue 对象里面的 data 里面存放的数据…

Js es6 Promise理解和使用

js中的promise是一个异步编程的解决方案,语法层面上他是一个构造函数,名字为Promise()。 它的作用就是将一个任务task封装为一个Promise类的实例对象,这个对象会将任务自动运行并得到任务结果,而且在得到结果的过程中并不会影响到…

告诉你应该选择 openSUSE 的五大理由

导读多数的的桌面 Linux 用户都会选择三种发行版本:Debian/Ubuntu、Fedora 或者 Arch Linux。但是今天,我将给出你需要使用 openSUSE 的五大理由。相比其他的 Linux 发行版,我总能在 openSUSE 上看到一些令人耳目一新的东西。我说不太好&…

多普勒效应(CSDN_0003_20220909)

目录 1. 机械波的多普勒效应 2. 电磁波的多普勒效应 文章编号(CSDN_0003_20220909) 由于原文公式较多,所以本文部分内容以截图的形式分享给大家,如果需要电子版原文,可留言或私信。 但凡提高雷达原理和雷达信号处理&a…

【前端】Vue项目:旅游App-(2)TabBar:搭建TabBar、循环获取动态数据、相关工具封装

文章目录目标代码与过程静态htmlcss改成动态数据效果总代码修改或新建的文件tabbarData.jstab-bar.vueload_assetsApp.vue目标 有两种实现方式: 把数据写死(静态、直接写在html中)动态数据:封装、vite获取动态数据方法 代码与过…

python详解(6)——键盘鼠标操控术(娱乐篇)

目录 本文为原创作品,抄袭必究! 🏆一、前言 🏆二、pyautogui模块 🏆三、鼠标相关操作 🚩1、鼠标移动 🚩2、获取鼠标位置 🚩3、鼠标点击 🚩4、按松鼠标 🚩5、拖…

笔耕不辍,学习习惯?兴趣爱好?源于对真知的热爱?

干程序员工作、上班赚钱、读书写作、股票投资,加班加点、充满激情,吸金赚钱、养家糊口、为自由和梦想而奋斗,这是比较基础的。 但如果想着奋斗的过程中,充满干劲地做一件事,坚持下去,投入沉迷其中&#xf…

Docker入门介绍

一、Docker介绍 1、Docker是什么? Docker ,翻译过来就是码头工人. 虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行 环境,容器之间互相隔离。 Docker是一个开源的应用容器引擎&#xff0…

Ubuntu Linux基本操作+安装工具+安装ROS+g++编译+Cmake

Ubuntu Linux基本操作安装工具安装ROSg编译Cmake 1、进入到根目录 cd /2、回到当前工作空间 cd ~3、查看目录中的内容 lsll4、创建文件夹 mkdir 1235、删除文件夹 rm -rf 123/这里我们在输入要删除的文件夹名时,可以通过按tab键快速补全对应的文件夹名。 按两…

【寒假每日一题】洛谷 P1838 三子棋I

题目链接:P1838 三子棋I - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了。 由于小a比较愚蠢&#xf…

《信号与系统实验》实验 3:信号时域抽样和恢复

文章目录 实验内容实验1:抽样定理验证实验f(t)间隔0.5s间隔1s间隔2s验证抽样定理实验2:信号恢复实验间隔0.5s间隔1s间隔2s抽样间隔对于信号恢复过程的影响DAC一阶保持器总结实验内容 实验1:抽样定