VBA之正则表达式(30)-- 提取机构代码
实例需求:提取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)-- 提取机构代码相关推荐
- VBA之正则表达式(14)-- 提取指定位数的数字
实例需求:只提取字符串中2位~4位的数字(无小数点),提取结果为蓝色数字. 测试字符串:6688-部门员工共10人与2019年6月成功完成销售额889966订单数689 这次的话题有些太简单了吧!?任 ...
- EXCEL VBA 使用正则表达式清洗替换数据
在EXCEL表内遇到有规律性的数据需要提取或者替换时,比如在数据中提取时间,身份证号码等,EXCEL内自带的查找替换就难以实现,我们可以利用VBA适用正则表达式去对数据进行匹配. 什么是正则表达式? ...
- vb.net提取html网址,如何提取网页代码中指定内容
怎么提取网页代码中指定内容? 某数据库网页结构如下: html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- VBA之正则表达式(1)-- 基础篇
正则表达式(Regular Expression),常被用来检验.替换符合某个模式(规则)的字符串,在代码中常缩写为regexp. VBA中并没有直接提供正文表达式对象,需要借助VBScript的正则 ...
- VBA之正则表达式(3)-- 特殊公式计算
实例需求:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...,现在需要统计数量总和,如C列所示.例如B3中明细为100*3+115*1对应的包装个数就是3+1. 示例代码如下. S ...
- VBA之正则表达式(7)-- 乾坤大挪移(数据整理)
实例需求:数据保存在A列中,数据组之间使用全角逗号分隔,重整后需要将每组数据开始的圆括号部分移动到末尾,并合并相同的全角方括号内容.貌似这个需求有些拗口,实际效果见B列. 示例代码如下. Sub Re ...
- python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:
python爬虫--三步爬得电影天堂电影下载链接,30多行代码即可搞定: 本次我们选择的爬虫对象是:https://www.dy2018.com/index.html 具体的三个步骤:1.定位到202 ...
- VBA之正则表达式(10)-- 添加千分位(2/3)
上一篇<添加千分位(1/3)>博文讲到,简单合并正则表达式无法实现想要的效果,问题在于小数部分数字. 这里的核心是如何消耗掉小数部分的数字,不被捕获,可以实现添加千分位功能的正则表达式如下 ...
- 正则表达式30分钟教程
来自WDDAVID'S BLOG的一篇学习正则表示的很不错的文章. 原文地址 正则表达式30分钟教程 本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页 ...
- 转载:正则表达式30分钟入门教程
正则表达式30分钟入门教程 版本:v2.21 (2007-8-3) 作者:deerchao 来源:unibetter大学生社区 转载请注明来源 目录 本文目标 如何使用本教程 正则表达式到底是什么? ...
最新文章
- 2022-2028年中国新能源环卫车行业深度调研与投资战略规划分析报告
- .net 面试题系列文章三(附答案)
- 固定div的位置——不随窗口大小改变为改变位置
- 操作系统任务执行和任务切换的基本实现原理
- 《JAVA程序设计》_第四周学习总结
- opengl加载显示3D模型ZGL类型文件
- 运行velocity的官方例子
- Java8-本地缓存
- 运行时类加载以支持不断变化的API
- vb连接mysql未发现_vb连接MySQL遇到的问题解决方法
- Codeblocks和gdb调试 (转)
- 小程序日历插件的使用
- 【图】二分图最大权匹配
- php测试宽带速度慢,性能测试问题排查一例——网络带宽瓶颈
- 高速的二舍八入三七作五_北京高速公路恢复收费,相关负责人回应收费新政三大热点问题...
- 网易云服务器上传文件,网易云音乐怎么把音乐上传到云盘 网易云音乐把音乐上传到云盘的步骤方法...
- GB35114 A级过检
- Google究竟怎么扣税,如何结算?你想知道的都在这里了
- ls命令显示颜色含义详解
- cad断点快捷键_CAD打断和打断于点怎么使用?CAD打断快捷键命令及操作方法
热门文章
- java 计算8+88+888+......前12项之和
- 50款PS完美汉化插件一键安装,win+mac
- 怎么使用biopython_什么是Biopython? 你能用Biopython做什么? Biopython功能概。
- java jframe 图标_java怎么修改jframe图标?
- 3dmax2016卸载/安装失败/如何彻底卸载清除干净3dmax2016注册表和文件的方法
- Cloud Computing HCIA-③华为企业级虚拟化解决方案
- ABB机器人外部轴电机配置(MU系列)
- 告别手机自带浏览器,分享2022年好用的手机浏览器
- 超详细设置Idea类注释模板和方法注释模板
- html三级导航栏编写