正则
taller_2000
不积跬步,无以至千里;不积小流,无以成江海
展开
-
VBA之正则表达式(47)-- 快速将公式转换为静态值计算
实例需求:工作表I列包含多种计算公式,为了便于演示,将I列公式显示在J列单元格中,现在需要将公式的单元格引用转换为静态值,如K列所示。原创 2024-08-27 12:59:20 · 466 阅读 · 0 评论 -
VBA之正则表达式(46)-- 解析业务逻辑公式
实例需求:某业务系统的逻辑公式如下所示(单行文本),保存在活动工作表的A1单元格中。现在需要按如下规则提取数据,结果如下所示。- 提取引号之间的的关键字,可能包含空格- 提取相应的操作符合: + - * / = - 提取最后的数字原创 2024-08-25 21:35:29 · 266 阅读 · 0 评论 -
VBA之正则表达式(45)-- 提取SQL语句中的函数
实例需求:数据工程师或者DBA日常工作中大量使用SQL语句,有些语句(或者存储过程)行数非常多,现在需要提取其中的所有使用了函数的相关部分,对于如下语句,需要提取Mid([编号],2,4) AS [产品]和datediff("D",[购买日期],"2024-01-01") AS [日期]两个字符串。原创 2024-04-24 13:32:39 · 392 阅读 · 1 评论 -
VBA之正则表达式(44)-- 拆分商品和规格
实例需求:商品组清单保存在A列中,现需要将其拆分为商品名称,保存在从B列开始的后续单元格中,部分商品包含规格,并且多种规格属性使用了逗号分隔,因此无法直接使用Excel分列功能完成数据拆分。原创 2023-11-03 01:10:26 · 334 阅读 · 0 评论 -
VBA之正则表达式(43)-- 从网页中提取指定数据
实例需求:由网页中提取下图中颜色标记部分内容,网页中其他部分与此三行格式相同。原创 2023-10-16 11:44:42 · 803 阅读 · 0 评论 -
VBA之正则表达式(42)-- 快速提取名称
实例需求:A列为待处理数据,现需要从中提取商品名、通用名、胰岛素笔相关信息,保存到B列至D列,需要注意如下几点:- `胰岛素笔`(E列)数据只存在于每组产品的第一行记录中,例如第2行数据中的“胰岛素笔”,对应第2~8行数据。- 商品名称可能以数字或者字母结尾,通用名可能以数字开头原创 2023-07-01 12:17:59 · 644 阅读 · 0 评论 -
VBA之正则表达式(42)-- 提取代码中变量名称
实例需求:待处理代码段如下所示,现在需要提取其中的变量名称。原创 2023-06-01 12:19:54 · 847 阅读 · 0 评论 -
VBA之正则表达式(41)-- 替换函数声明
实例需求:对于函数声明代码的参数部分进行规范化处理,`Boolean`类型参数全部使用`ByVal`方式,效果如下图所示。原创 2023-04-01 01:09:11 · 778 阅读 · 0 评论 -
VBA之正则表达式(41)-- 快速标记两个星号之后的字符
实例需求:工作表中的数据保存在A列~G列,现需要识别D列中包含超过两个星号的内容,并将第3个星号及其之后的字符设置为红色字体,如图所示。原创 2023-03-01 02:02:46 · 568 阅读 · 0 评论 -
VBA之正则表达式(40)-- 多组数据拆分
实例需求:订单数据保存在C列中,需要拆分菜品,每个菜品有三个字段:名称、单价、数量。拆分菜品后的单元格区域添加边框。如下图所示。原创 2023-03-01 02:03:15 · 532 阅读 · 1 评论 -
VBA之正则表达式(39)-- 提取规格数据(2/2)
实例需求:A列为某产品名称,现需要提取其中的规格数据,具体规则如下:- 规格数据以如下关键字开头:RO、RE、SQ、SD、QD、OB、HX、ET、QR、D2- 规则数据可能有多段(截图中红色部分)- 提取规格数据之后,乘号(即x)替换为星号- R(或者r)之前增加星号- 剔除无意义的0和小数点,如C6和C15所示。原创 2023-01-02 01:50:09 · 750 阅读 · 0 评论 -
VBA之正则表达式(38)-- 提取规格数据(1/2)
实例需求:A列为某产品名称,现需要提取其中的规格数据,具体规则如下:规格数据以如下关键字开头:RO、RE、SQ、SD、QD、OB、HX、ET、QR、D2规则数据可能有多段(截图中红色部分)提取规格数据之后,乘号(即x)替换为星号R(或者r)之前增加星号剔除无意义的0和小数点,如C6和C15所示。原创 2023-01-02 01:47:33 · 1285 阅读 · 0 评论 -
VBA之正则表达式(37)-- 去除无意义的零
实例需求:A列为某产品规格,现需要剔除其中无意义的数字0,具体解释参见C列。原创 2022-11-02 13:22:40 · 853 阅读 · 0 评论 -
VBA之正则表达式(36)-- 提取年份范围
如果yrs数组元素不为空,在第16行代码将年份写入数组中。实例需求:原始数据在A列,先需求整理为C列。第24行代码释放对象变量占用的系统资源。第10~11行代码执行正则替换。第12行代码将字符串拆分为年份。第13~19行代码循环处理年份。第23行代码将结果写入单元格中。第3行代码将数据读取到数组中。第5行代码创建正则表达式对象。第9~20行代码循环处理数据。示例代码运行结果如下图所示。第7行代码设置全局匹配。第8行代码设置匹配模式。第22行代码清空D列。原创 2022-09-15 10:40:23 · 591 阅读 · 0 评论 -
单词拆分(2/2)
上一篇博客使用VBA的Split方式实现了单词拆分,由于涉及标点符号等特殊字符,其实并不完美实现,例如如果文本中单词左侧可能出现引号,那么需要继续扩充代码进行判断。实例需求一段多行英文保存在A1单元格,现需要拆分出其中的单词,依次写入A5开始的第一列单元格中。...原创 2022-07-19 07:27:26 · 176 阅读 · 0 评论 -
VBA之正则表达式(35)-- 提取年份
实例需求:提取文字中的4位数字年份(19xx或者20xx),文字中包含其他的数字,例如多余4位的:0749345,非年份数字:H-1803F。示例代码如下。【代码解析】第4行代码创建正则表达式对象。第5行代码设置全局匹配。第6行代码设置匹配模式。第7行代码读取A1单元格的内容。第9行代码判断是否匹配成功。第10~12行代码循环处理匹配结果。第11行代码输出匹配值。通过观察发现年份字符有的在圆括号中,有的在方括号中,有的没有括号,因此不能使用此特征。无论是否有括号,年份前后都分别有一个非数字字原创 2022-06-03 12:44:56 · 1379 阅读 · 0 评论 -
VBA之正则表达式(34)-- 提取照片规格
实例需求:按照指定规则从A数据提取相应的规格至B和C列,示例数据如下所示。示例代码如下。Sub Demo() Dim regExp As Object Dim aRes, arr Set regExp = CreateObject("vbscript.regExp") regExp.Global = True regExp.Pattern = "([\d\.]+)x(\d+(\.\d+)*)" arr = [a1].CurrentRegion.Value原创 2022-04-02 11:32:07 · 883 阅读 · 2 评论 -
VBA之正则表达式(33)-- 网页表格提取数据
实例需求:示例数据如下所示。```<td><a href="javascript:;" data-url="/gstdHb/queryInfo" data-param="{stdId:'46826'}" data-tempid="shb-info">电力变压器</a></td><td class="txt-nowrap">DL/T 1539-2016</td><td>1</td>```从示例数据提取名称、规格和数量>电力变压器>DL/T 1539-2016>1原创 2022-03-09 14:27:24 · 2463 阅读 · 0 评论 -
VBA之正则表达式(32)-- 提取指定规格
实例需求:按照指定规则从示例数据提取相应的规格,示例数据如下所示。A75432222新粉色M/160 – 提取规格为:MB43243333畅销黑色44 – 提取规格为:44C93119125 – 无规格方法1:Sub Demo1() Dim regExp As Object, regExpMHs As Object Set regExp = CreateObject("vbscript.regExp") regExp.Global = True regExp.P原创 2022-01-01 07:33:13 · 1023 阅读 · 0 评论 -
VBA之正则表达式(31)-- 指定格式数据拆分
实例需求:按照指定规则从A列示例数据提取相应的内容,如下图所示。提取规格:1、第一段,第1个字符“-”前的字符,结果为字符串格式2、第二段,第1个“-”字符与第2个“-”字符中间的字符,结果为数字格式提取数字后,结果=1,则返回:1提取数字后,结果=2,则返回:2其余返回:03、第三段、第2个“-”字符与第3个“-”字符中间的字符,结果为字符串格式注意:有些编号没有第三个“-”,要判断。示例数据:A001-Y1-655-1-AA006-01-085A384-M1-221-1-原创 2022-01-01 07:32:04 · 1022 阅读 · 0 评论 -
VBA之正则表达式(30)-- 提取机构代码
实例需求:提取A列示例数据行末的机构代码,如下图所示。示例数据:1.1MERRILLLYNCH INTERNATIONAL一般机构21.563.221.2中国工商银行股份有限公司-天弘添利债券型证券投资基金(LOF)基金35.965.371.3中国工商银行-诺安平衡证券投资基金基金9.001.341.4博时价值回报固定收益型养老金产品-中国银行股份有限公司一般机构16.532.471.5吴丰礼–224.3533.481.6国寿养老稳健5号固定收益型养老金产品-中国工商银行股份有限公司一般机原创 2021-12-08 00:24:30 · 830 阅读 · 0 评论 -
VBA之正则表达式(29)-- 提取规格(电视)
实例需求:待处理字符串如下。changhong长虹智能电视 58M89 ppt海尔Haier 58GT66C Max智能电视,康佳LED58G3 pro58英寸4K液晶电视机Konka 21K9S5需要提取其中的规格。示例代码如下。Sub Demo1() Dim strWord As String Dim objRegExp As Object, objMH As Object Set objRegExp = CreateObject("VBSCRIPT.REGE原创 2021-11-02 12:51:43 · 283 阅读 · 2 评论 -
VBA之正则表达式(28)-- 提取带编号的文本
实例需求:待处理字符串如下,需要提取其中被标记颜色的部分,注意数字序号之后的符号有多种。示例代码如下。Sub Demo() Dim strWord As String Dim objRegExp As Object, objMH As Object Set objRegExp = CreateObject("VBSCRIPT.REGEXP") strWord = [a1] With objRegExp .Global = True原创 2021-11-02 12:27:34 · 1141 阅读 · 1 评论 -
VBA之正则表达式(27)-- 提取包含关键字的字段
实例需求:待处理字符串如下,需要提取其中包含“电子”的部分,即:电子计算机、微型电子管、新创电子-电脑-电脑硬盘-电子计算机-晶体管-微型电子管-新创电子-示例代码如下。Sub Demo1() Dim strWord As String Dim objRegExp As Object, objMH As Object Set objRegExp = CreateObject("VBSCRIPT.REGEXP") strWord = "-电脑-电脑硬盘-电子计算机-晶原创 2021-11-02 11:44:13 · 3928 阅读 · 0 评论 -
VBA之正则表达式(26)-- 提取价格
实例需求:待处理文本如下,需要提取其中的价格(下图中红色字体文字),注意不提取其他数字。示例代码如下。Sub Demo() Dim strWord As String Dim objRegExp As Object, objMH As Object Set objRegExp = CreateObject("VBSCRIPT.REGEXP") strWord = Trim([a1]) With objRegExp .Global = True原创 2021-11-02 11:27:12 · 595 阅读 · 3 评论 -
VBA之正则表达式(25)-- 提取规格
实例需求:待处理字符串如下。>ABC1550R71PF1333K, 33nF,50V; X117R/ 0402处理规则:仅提取其中如下图黄色部分,注意不提取第一个逗号之前的任何4位数字原创 2021-10-01 13:09:08 · 927 阅读 · 0 评论 -
VBA之正则表达式(24)-- 杂乱数据提取
实例需求:待处理字符串:>西装,皮带,领带各10,西装20上衣30,西装40上衣50西装皮带领带各60,西装70上衣80,西装90上衣80,70西装60上衣,西装,皮带,领带各50,40西装,上衣、领带各30,西装皮带领带各20,皮带领带各10处理规则:仅提取其中包含“xx各yy”的部分,如下图黄色部分所示。原创 2021-09-01 10:57:20 · 1171 阅读 · 0 评论 -
VBA之正则表达式(24)-- 字符串转数组
最近有个网友提问,下面的代码中并没有指定正则表达式的匹配模式(Pattern属性),为什么也可以执行,正则对象根据什么规则去进行匹配。原创 2021-05-22 13:09:18 · 1870 阅读 · 0 评论 -
VBA之正则表达式(23)-- 替换指定位置字符
实例需求:待处理字符重:`5*s+s[面积s=222m2]+s*5[套s=333m2s]+s+s/s^2`处理规则:将保留中括号中的字符,将其他部分字符中的s替换数字3结果为:`5*3+3[面积s=222m2]+3*5[套s=333m2s]+3+3/3^2`原创 2021-01-29 02:51:21 · 4858 阅读 · 0 评论 -
VBA之正则表达式(22)-- 组合数据拆分(2/2)
实例需求:规格数据保存在A1单元格,其中包含多行数据,每行数据都是有多个字段组合而成,现在需要将数据拆分为C列至H列的数据(假设第2行的标题行已经存在)。上一篇博客已经实现了数据拆分,但是正则模式表达式有些长,下面介绍一个更简单的方法。Sub Demo2() Dim regExp Set regExp = CreateObject("vbscript.regExp") regExp.Global = True regExp.Pattern = "[^一-龟\d\n]+"原创 2020-10-01 12:57:34 · 631 阅读 · 0 评论 -
VBA之正则表达式(21)-- 组合数据拆分(1/2)
实例需求:规格数据保存在A1单元格,其中包含多行数据,每行数据都是有多个字段组合而成,现在需要将数据拆分为C列至H列的数据(假设第2行的标题行已经存在)。原创 2020-10-01 12:57:07 · 717 阅读 · 4 评论 -
VBA之正则表达式(20)-- 规格数据(正负偏差)拆分
实例需求:规格数据保存在第一列,其中包含多种不同格式,现在需要拆分为三列:主尺寸、负偏差和正偏差。无偏差数据的填入0负偏差列加入负号偏差数据为简写小数需要补全小数点之前的零(A6和A7)±偏差数据分别写入负偏差和正偏差列对于正负偏差分别给出的数据,需要符合负偏差在前,正偏差在后的形式示例代码如下:Sub Demo() Dim regExp As Object, aRes Set regExp = CreateObject("vbscript.regExp") re原创 2020-08-16 04:43:38 · 801 阅读 · 0 评论 -
VBA之正则表达式(2)-- 批量修改公式
实例需求:数据保存在F列(公式,判断条件,whatever),需要在每个单元格引用之前添加A列指定的工作表名称+!,结果如H列所示,对于F16中的公式,由于I49已经指定工作表,所以此单元格不需要再处理,核心问题是如何定位单元格引用。示例代码如下。Sub RegExpDemoReplace() Dim Res() Dim objRegEx As Object Dim ...原创 2019-03-04 04:05:17 · 10943 阅读 · 4 评论 -
VBA之正则表达式(19)-- 相对引用转绝对引用
大家都知道Excel公式中使用的单元格引用有两种形式:相对引用(如A1)和绝对引用(如$A$1)两种形式,在输入公式按<F4>可切换两种引用形式。对于已有的公式,如果需要变更引用形式,逐个手工修改有些费劲,而且可能会导致人为错误,使用正则表达式功能,可以完成公式的转换。原创 2020-05-22 00:46:46 · 2321 阅读 · 0 评论 -
VBA之正则表达式(6)-- 设置音标格式
实例需求:数据保存在A列中,需要对其中音标部分进行下划线标注,如C列所示,匹配这样的非典型字符,正则表达式是最佳选择。示例代码如下。Sub RegExpDemo() Dim strTxt As String Dim objRegEx As Object, objMatch As Object Dim objMH As Object, c As Range Se...原创 2019-04-24 23:54:43 · 2192 阅读 · 0 评论 -
VBA之正则表达式(11)-- 添加千分位(3/3)
上一篇《添加千分位(2/3)》博文讲解了实现添加千分位功能的正则表达式如下:((\.\d+[\w\W]*?)*?\d)(?=(\d{3})+(\D|$)),如果小数位于段落的最后,那么匹配结果就会有问题,可以采用添加后缀构建字符串序列的方式来处理。原创 2019-05-04 00:09:21 · 2088 阅读 · 0 评论 -
VBA之正则表达式(10)-- 添加千分位(2/3)
上一篇《添加千分位》博文讲到,简单合并正则表达式无法实现想要的效果,问题在于小数部分数字。这里的核心是如何消耗掉小数部分的数字,不被捕获,可以实现添加千分位功能的正则表达式如下:((\.\d+[\w\W]*?)*?\d)(?=(\d{3})+(\D|$))。原创 2019-05-03 23:42:03 · 1880 阅读 · 0 评论 -
VBA之正则表达式(9)-- 添加千分位(1/3)
环视的一个经典应用就是添加千分位,在正则表达式中有如下几种环视(断言),对于整数和小数分别创建正则表达式添加千分位。原创 2019-05-03 22:22:45 · 3715 阅读 · 0 评论 -
VBA之正则表达式(5)-- 中文字符
CJK字符集中从0x4E00到0x9FA5 的连续区域,包含了 20902 个来自于中国、韩国、日本的汉字,涵盖了多数中文字符,可以说CJK是GB2312-80和BIG5等字符集的超集。一般情况下使用`[一-龥]`匹配汉字就足够了。由于输入龥字比较麻烦,直接使用16进制的字符编码`[\u4e00-\u9fa5]`来表示正文中文字符集更加方便。原创 2019-03-10 11:07:46 · 13882 阅读 · 2 评论 -
VBA之正则表达式(4)-- 提取日期和金额
实例需求:数据保存在A列中,需要将其中的日期和金额分别提取至B列和C列。其中日期也两种不同格式,金额可能包含小数点、千分符和货币标识。示例代码如下。Sub RegExp_Date_Num() Dim Res() Dim objRegEx As Object Dim objMH As Object Dim j As Integer Set objRegE...原创 2019-03-09 14:49:00 · 10468 阅读 · 0 评论