实例需求:提取A列示例数据行末的机构代码,如下图所示。

示例数据:

1.1MERRILLLYNCH INTERNATIONAL一般机构21.563.22
1.2中国工商银行股份有限公司-天弘添利债券型证券投资基金(LOF)基金35.965.37
1.3中国工商银行-诺安平衡证券投资基金基金9.001.34
1.4博时价值回报固定收益型养老金产品-中国银行股份有限公司一般机构16.532.47
1.5吴丰礼–224.3533.48
1.6国寿养老稳健5号固定收益型养老金产品-中国工商银行股份有限公司一般机构14.782.21
1.7杨双保–35.505.30
1.8西北投资管理(香港)有限公司-西北飞龙基金有限公司一般机构20.002.98
1.9银华基金-交通银行-银华通赢1号集合资产管理计划一般机构13.492.01
1.10黄代波–28.544.26

示例代码如下:

Sub Demo1()Dim regExp As Object, regExpMHs As ObjectSet regExp = CreateObject("vbscript.regExp")regExp.Global = TrueregExp.Pattern = "\d+\.\d+\.\d+"arr = [a1].CurrentRegion.ValueFor i = 2 To UBound(arr)Set regExpMHs = regExp.Execute(arr(i, 1))If regExpMHs.Count > 0 Thenarr(i, 2) = regExpMHs(0)End IfNext[a1].CurrentRegion.Value = arrSet regExpMHs = NothingSet regExp = Nothing
End Sub

代码解析:

第3行代码创建正则表达式对象。
第4行代码设置全局匹配。
第5行代码设置匹配规则。

正则表达式 说明
\d+ 匹配一个或者多个数字
\. 匹配一个英文半角句号

第6行代码将数据区域内容保存在数组中。
第7~12行代码使用For语句循环处理数据。
第8行代码执行正则匹配。
第9行代码判断是否匹配成功。
第10行代码将匹配结果保存在数组中。
第13行代码将数据写入工作表。
第14~15行代码清空对象变量,释放系统资源。

这个实例的正则规则并不复杂,接下来才是要讲的重点,正则匹配规则其实就是字符串规律的一种表达形式,上述代码使用三段数组以点号分隔,这个最直接的表达方式,观察一下示例数据,每行文字的起始处和结尾都是数字字符串,只要正则匹配模式能够区分二者的差异即可,代码可以简化。

Sub Demo2()Dim regExp As Object, regExpMHs As ObjectSet regExp = CreateObject("vbscript.regExp")regExp.Global = TrueregExp.Pattern = "[\d\.]{5,}"arr = [a1].CurrentRegion.ValueFor i = 2 To UBound(arr)Set regExpMHs = regExp.Execute(arr(i, 1))If regExpMHs.Count > 0 Thenarr(i, 2) = regExpMHs(0)End IfNext[a1].CurrentRegion.Value = arrSet regExpMHs = NothingSet regExp = Nothing
End Sub

代码解析:
第5行设置匹配模式。

正则表达式 说明
[\d\.] 匹配数字或者英文半角句号
{5,} 匹配至少5个字符

每行起始处的字符串虽然与要提取的类似,但是其最大长度为4,因此只有简单的限制匹配模式中的字符串长度就可以实现数据提取。

这种“偷懒”模式的好处是可以简化正匹配规则,带来的潜在问题是容易受到干扰,例如文本行起始处的数字编号位数增加,那么也就符合了匹配规则,如下所示。

10.10黄代波–28.544.26

因此没有哪种匹配规则是万能的,需要大家根据实际应用场景选择合适的方案。

VBA之正则表达式(30)-- 提取机构代码相关推荐

  1. VBA之正则表达式(14)-- 提取指定位数的数字

    实例需求:只提取字符串中2位~4位的数字(无小数点),提取结果为蓝色数字. 测试字符串:6688-部门员工共10人与2019年6月成功完成销售额889966订单数689 这次的话题有些太简单了吧!?任 ...

  2. EXCEL VBA 使用正则表达式清洗替换数据

    在EXCEL表内遇到有规律性的数据需要提取或者替换时,比如在数据中提取时间,身份证号码等,EXCEL内自带的查找替换就难以实现,我们可以利用VBA适用正则表达式去对数据进行匹配. 什么是正则表达式? ...

  3. vb.net提取html网址,如何提取网页代码中指定内容

    怎么提取网页代码中指定内容? 某数据库网页结构如下: html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  4. VBA之正则表达式(1)-- 基础篇

    正则表达式(Regular Expression),常被用来检验.替换符合某个模式(规则)的字符串,在代码中常缩写为regexp. VBA中并没有直接提供正文表达式对象,需要借助VBScript的正则 ...

  5. VBA之正则表达式(3)-- 特殊公式计算

    实例需求:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...,现在需要统计数量总和,如C列所示.例如B3中明细为100*3+115*1对应的包装个数就是3+1. 示例代码如下. S ...

  6. VBA之正则表达式(7)-- 乾坤大挪移(数据整理)

    实例需求:数据保存在A列中,数据组之间使用全角逗号分隔,重整后需要将每组数据开始的圆括号部分移动到末尾,并合并相同的全角方括号内容.貌似这个需求有些拗口,实际效果见B列. 示例代码如下. Sub Re ...

  7. python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:

    python爬虫--三步爬得电影天堂电影下载链接,30多行代码即可搞定: 本次我们选择的爬虫对象是:https://www.dy2018.com/index.html 具体的三个步骤:1.定位到202 ...

  8. VBA之正则表达式(10)-- 添加千分位(2/3)

    上一篇<添加千分位(1/3)>博文讲到,简单合并正则表达式无法实现想要的效果,问题在于小数部分数字. 这里的核心是如何消耗掉小数部分的数字,不被捕获,可以实现添加千分位功能的正则表达式如下 ...

  9. 正则表达式30分钟教程

    来自WDDAVID'S BLOG的一篇学习正则表示的很不错的文章. 原文地址 正则表达式30分钟教程  本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页 ...

  10. 转载:正则表达式30分钟入门教程

    正则表达式30分钟入门教程 版本:v2.21 (2007-8-3) 作者:deerchao 来源:unibetter大学生社区 转载请注明来源 目录 本文目标 如何使用本教程 正则表达式到底是什么? ...

最新文章

  1. 2022-2028年中国新能源环卫车行业深度调研与投资战略规划分析报告
  2. .net 面试题系列文章三(附答案)
  3. 固定div的位置——不随窗口大小改变为改变位置
  4. 操作系统任务执行和任务切换的基本实现原理
  5. 《JAVA程序设计》_第四周学习总结
  6. opengl加载显示3D模型ZGL类型文件
  7. 运行velocity的官方例子
  8. Java8-本地缓存
  9. 运行时类加载以支持不断变化的API
  10. vb连接mysql未发现_vb连接MySQL遇到的问题解决方法
  11. Codeblocks和gdb调试 (转)
  12. 小程序日历插件的使用
  13. 【图】二分图最大权匹配
  14. php测试宽带速度慢,性能测试问题排查一例——网络带宽瓶颈
  15. 高速的二舍八入三七作五_北京高速公路恢复收费,相关负责人回应收费新政三大热点问题...
  16. 网易云服务器上传文件,网易云音乐怎么把音乐上传到云盘 网易云音乐把音乐上传到云盘的步骤方法...
  17. GB35114 A级过检
  18. Google究竟怎么扣税,如何结算?你想知道的都在这里了
  19. ls命令显示颜色含义详解
  20. cad断点快捷键_CAD打断和打断于点怎么使用?CAD打断快捷键命令及操作方法

热门文章

  1. java 计算8+88+888+......前12项之和
  2. 50款PS完美汉化插件一键安装,win+mac
  3. 怎么使用biopython_什么是Biopython? 你能用Biopython做什么? Biopython功能概。
  4. java jframe 图标_java怎么修改jframe图标?
  5. 3dmax2016卸载/安装失败/如何彻底卸载清除干净3dmax2016注册表和文件的方法
  6. Cloud Computing HCIA-③华为企业级虚拟化解决方案
  7. ABB机器人外部轴电机配置(MU系列)
  8. 告别手机自带浏览器,分享2022年好用的手机浏览器
  9. 超详细设置Idea类注释模板和方法注释模板
  10. html三级导航栏编写