多种方法 巧用正则表达式提取特定数据

2022-05-30 10:48
电脑爱好者 2022年4期
关键词:该软件单元格正则

方法1:使用在线正则服务

从图1所示的数据可以看到,需要提取的单号实际上就是字符串中的非负整数(0和其他正整数),所以我们完全可以使用正则表达式进行匹配。现在有很多在线服务可以直接生成正则表达式,比如“http://tool.chinaz.com/regex”。

首先复制A2:A5数据区域,接着打开上述的链接,将数据粘贴到“在线正则表达式测试”下的文本框中,再点击“常用正则表达式”下的“正整数”,然后将自动生成的正则表达式“[1-9] \d*”(不包含引号,下同)修改为“[0 -9] \d*”(因为原始数据中包含数字“0”),在下面的窗格中就可以看到匹配结果,将“匹配到XX条结果”处的内容复制到剪贴板中(图2)。

接着返回Excel窗口,右击B列并依次选择“设置单元格格式→数字→文本”,将其设置为文本格式(因为需要提取的单号有超过15位的数字,并且数据首位包含“0”,设置为文本格式后不会显示错误),然后将刚刚复制到的内容粘贴到B2:B5数据区域,即可完成数据的提取(图3)。

方法2:使用VBA提取

对代码比较熟悉的朋友,也可以通过自制VBA来提取数据。在Excel窗口中按下“Alt+F11”组合键打开VBA窗口,依次点击“插入→模块”,在编辑框中输入下列的代码(图4):

Function ts(rng As Range)

With CreateObject("VBscript.regexp")

. Global = True

. Pattern = "[0-9]\d*" '正则表达式

If .Execute(rng).Count = 0 T hen

ts = " "

E lse

ts= .Execute(rng)(0)

E nd If

E nd With

End Function

代码解释:

这里通过调用VBA的正则语法来生成自定义函数ts,该函数会遍历查询所选择的数据,然后使用“[0-9]\d*”正则表达式来提取符合要求的数据,此正则表达式可以通过“方法1”在线获取。如果需要执行其他的提取操作,可以先用“方法1”介绍的在线服务生成对应的正则表达式,再替换图4中所框选的代码内容就可以了。

现在返回Excel窗口,在C2单元格中输入公式“=ts(A2)”(即通过上述代码生成的函数),将公式下拉填充到C5单元格,就可以完成数据的提取了(图5)。

方法3:使用“Excel正则工具”软件

编写VBA有一定的技术门槛。对VBA不熟悉的朋友,借助“Excel正则工具”软件也可以在Excel中提取数据。首先到“https://meta.appinn.net/t/topic/26007”下载该软件。软件运行后会自动最小化到任务托盘,双击程序图标打开程序界面,然后切换到“辅助”选项卡,可以看到很多内置的常用正则语法,我们可以通过设置热键来快速调用(图6)。

注意:“Excel正则工具”包含了宏代码,下载和运行该软件时会被Windows Defender拦截,所以需要将其添加到排除列表中。

现在返回Excel窗口,按下默认热键“Win+Z”调出“Excel正則工具”的功能界面,在“正则表达式”处输入“[0-9]\d*”,在“对正则结果进行处理:必须含结果变量$0”处输入“$0”,其他保持默认设置(图7)。

然后在Excel窗口中选择需要提取的数据区域A2:A5,再切换到“Excel正则工具”的功能界面,点击“正则匹配”按钮,就可以在B列自动提取到所需的数据了(图8)。

猜你喜欢
该软件单元格正则
玩转方格
玩转方格
剩余有限Minimax可解群的4阶正则自同构
类似于VNL环的环
浅谈Excel中常见统计个数函数的用法
Flashfxp Password Decryptor
有限秩的可解群的正则自同构
牛津大学数据联盟应用软件
奇异保序变换半群的极大正则子半群