收藏 分享(赏)

EXCEL VBA正则表达式学习.docx

上传人:11xg27ws 文档编号:4564560 上传时间:2019-01-02 格式:DOCX 页数:4 大小:21.37KB
下载 相关 举报
EXCEL VBA正则表达式学习.docx_第1页
第1页 / 共4页
EXCEL VBA正则表达式学习.docx_第2页
第2页 / 共4页
EXCEL VBA正则表达式学习.docx_第3页
第3页 / 共4页
EXCEL VBA正则表达式学习.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、1、正则表达式能干什么呢?你肯定用过 excel 的“查找” 、 “替换”功能。正则表达式也可以对字符串进行特定的复杂查找和替换,但它比“查找”和“替换”功能强大的多的多。正在看蓝桥玄霜版主的字典帖,选了其中的两个例子(附件中的例 A 和例 B) ,你看到的第一反应是用字典去解决,例 A 和例 B 使用正则表达式也很好的解决了问题。 (给出这两个例子不是说正则表达式比字典好,只是借此体会正则表达式的强大功能)例 1、有如下一组电话号码,如何改变成右侧的样式。(020)12345678 020-12345678(021)32145678 021-32145678(0371)45678129 03

2、71-45678129(0392)1234567 0392-1234567(010)21458965 010-21458965(0393)45987636 0393-45987636(0372)87654321 0372-87654321你想到用查找替换功能解决的方法了吗?利用正则表达式很容易实现。Private Sub CommandButton1_Click()Dim regEX As New RegExp定义一个正则表达式对象regEX.Pattern = “(d3,4)(d7,8)“设置正则表达式For i = 1 To 7Range(“c“ & i) = regEX.Replace(

3、Range(“a“ & i), “$1-$2“)NextEnd Sub2、什么是正则表达式?简单的说,正则表达式就是一个由一组具有特殊含义的字符组成的字符串, (如例中的“(d3,4)(d7,8)“) ,这些有特殊含义的字符设置了一些条件,并通过 regEX.Pattern = “(d3,4)(d7,8)“这一句告诉查找引擎,按照它规定的条件查找符合要求的字符串。再看一个简单的例子:例 2,把字符串“这有一本关于 VBA 的书,它在第二个书柜里”里的书换为“book” 。Private Sub CommandButton2_Click()Dim regEX As New RegExpregEX

4、.Global = True设置查找返回全部匹配regEX.IgnoreCase = FALSE设置查找不区分大小写 regEX.Pattern = “书“Range(“a12“) = regEX.Replace(“这有一本关于 VBA 的书,它在第二个书柜里“, “book“)End Sub3、正则表达式的工作原理我们需要找出目标字符串中所有的“书”字,根据我们的要求写出正则表达式:”书” ,通过 regEX.Pattern = “书“这句把我们的要求以正则表达式的形式告诉查找引擎(本例中正则表达式规定的条件很简单:符合要求的字符串必须是字符“书”),查找引擎从目标字符串的第一个字符开始查找

5、,找到符合正则表达式要求的字符串后就存储起来,然后继续向后查找直到结束。最后,把找到的所有符合要求的字符串以集合的形式返回。 (关于返回的集合后面会详细介绍)4、正则表达式对象有四个属性:Global:设置为 true 表示查找引擎返回找到的所有符合要求的子字符串,设置为 false 表示只返回找到的第一个符合要求的子字符串。IgnoreCase:设置为 true 表示查找时忽略大小写,设置为 FALSE 表示查找时区分大小写。Pattern:存放正则表达式,如例 2 一样 regEX.Pattern = “书“MultiLine:不用多说了吧。5、正则表达式对象有三个方法:Execute 方

6、法: 语法 object. Execute(sourcestring as string) as string, object 为你定义的正则表达式对象(如:regEX) ,参数sourcestring 为要对其进行查找的字符串(如例中的“这有一本关于 VBA 的书,它在第二个书柜里“) 。Execute 方法查找并返回符合要求的字符串的集合,相当于使用“查找”功能。Test 方法:语法 object. Execute(sourcestring as string) as string,其结构和用法和 Execute 方法一样,它和 Execute 方法唯一不同的是 Test 方法只进行测试查

7、找,而不会返回符合要求的子字符串集合。一般用它判断是否可以找到符合要求的字符串。Replace 方法:语法 object. Replace(sourcestring as string,Replace) as string, object 为你定义的正则表达式对象,参数sourcestring 为要对其进行查找的字符串, 参数 Replacevar 为要替换成的内容(如例中的 “book“) 。Replace 方法查找并返回符合要求的字符串的集合,然后对集合里的字符串进行替换。相当于先使用“查找”功能然后再使用“替换”功能。6、使用正则表达式的步骤:要在 VBA 中使用正则表达式,首先要“工程

8、”“引用”里添加对“Microsoft VBScript Regular Expressions 5.5”的引用。(当然,你也可以采用后期绑定的方法) 。第一步:引用 “Microsoft VBScript Regular Expressions 5.5”第二步:然后根据实际情况设置正则表达式的属性。1、设置 Global 属性的值由于我们要替换所有的“书”字,而不是只替换第一个“书”字,所以设置 Global 属性为 TRUE 即 regEX.Global = True。2、设置 IgnoreCase 属性的值由于我们要查找替换的是汉字,无所谓大小写,所以设置 IgnoreCase 属性为

9、FALSE 即 regEX.IgnoreCase = FALSE。第三步、把我们要找的字符串必须符合的条件写成则表达式,并赋值给 Pattern 属性(例中是 regEX.Pattern = “书“)第四步:然后根据具体要求选择适当的方法,因为我们不仅要查找符合要求的字符串,而且还要对其进行替换,所以采用Replace 方法。 (例中是 regEX.Replace(“这有一本关于 VBA 的书,它在第二个书柜里“, “book“) 。看到这,你会发现使用正则表达式很容易,关键是如何根据具体要求写出正确的正则表达式,这是学习的主要内容。常用正则表达式 正则表达式用于字符串处理、表单验证等场合,实

10、用高效。现将一些常用的表达式收集于此,以备不时之需。匹配中文字符的正则表达式: u4e00-u9fa5评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):x00-xff评注:可以用来计算字符串的长度(一个双字节字符长度计 2,ASCII 字符计 1)匹配空白行的正则表达式:ns*r评注:可以用来删除空白行匹配 HTML 标记的正则表达式:*.*?|评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力匹配首尾空白字符的正则表达式:s*|s*$评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等 ),非常有用的表达式匹

11、配 Email 地址的正则表达式:w+(-+.w+)*w+(-.w+)*.w+(-.w+)*评注:表单验证时很实用匹配网址 URL 的正则表达式:a-zA-z+:/s*评注:网上流传的版本功能很有限,上面这个基本可以满足需求匹配帐号是否合法(字母开头,允许 5-16 字节,允许字母数字下划线):a-zA-Za-zA-Z0-9_4,15$评注:表单验证时很实用匹配国内电话号码:d3-d8|d4-d7评注:匹配形式如 0511-4405222 或 021-87888822匹配腾讯 QQ 号:1-90-94,评注:腾讯 QQ 号从 10000 开始匹配中国邮政编码:1-9d5(?!d)评注:中国邮政

12、编码为 6 位数字匹配身份证:d15|d18评注:中国的身份证为 15 位或 18 位匹配 ip 地址:d+.d+.d+.d+评注:提取 ip 地址时有用匹配特定数字:1-9d*$ /匹配正整数-1-9d*$ /匹配负整数-?1-9d*$ /匹配整数1-9d*|0$ / 匹配非负整数(正整数 + 0)-1-9d*|0$ /匹配非正整数(负整数 + 0)1-9d*.d*|0.d*1-9d*$ / 匹配正浮点数-(1-9d*.d*|0.d*1-9d*)$ / 匹配负浮点数-?(1-9d*.d*|0.d*1-9d*|0?.0+|0)$ / 匹配浮点数1-9d*.d*|0.d*1-9d*|0?.0+|0$ / 匹配非负浮点数(正浮点数 + 0)(-(1-9d*.d*|0.d*1-9d*)|0?.0+|0$ /匹配非正浮点数(负浮点数 + 0)评注:处理大量数据时有用,具体应用时注意修正匹配特定字符串:A-Za-z+$ /匹配由 26 个英文字母组成的字符串A-Z+$ /匹配由 26 个英文字母的大写组成的字符串a-z+$ /匹配由 26 个英文字母的小写组成的字符串A-Za-z0-9+$ /匹配由数字和 26 个英文字母组成的字符串w+$ /匹配由数字、26 个英文字母或者下划线组成的字符串评注:最基本也是最常用的一些表达式

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报