EXCEL VBA正则表达式学习.docx
文本预览下载声明
1、正则表达式能干什么呢?你肯定用过excel的“查找”、“替换”功能。正则表达式也可以对字符串进行特定的复杂查找和替换,但它比“查找”和“替换”功能强大的多的多。正在看蓝桥玄霜版主的字典帖,选了其中的两个例子(附件中的例A和例B),你看到的第一反应是用字典去解决,例A和例B使用正则表达式也很好的解决了问题。(给出这两个例子不是说正则表达式比字典好,只是借此体会正则表达式的强大功能)例1、有如下一组电话号码,如何改变成右侧的样式。(020 020021 0210371 03710392)1234567 0392-1234567(010 0100393 03930372 0372想到用查找—替换功能解决的方法了吗?利用正则表达式很容易实现。Private Sub CommandButton1_Click()Dim regEX As New RegExp‘定义一个正则表达式对象regEX.Pattern = \((\d{3,4})\)(\d{7,8})‘设置正则表达式For i = 1 To 7Range(c i) = regEX.Replace(Range(a i), $1-$2)NextEnd Sub2、什么是正则表达式?简单的说,正则表达式就是一个由一组具有特殊含义的字符组成的字符串,(如例中的\((\d{3,4})\)(\d{7,8})),这些有特殊含义的字符设置了一些条件,并通过regEX.Pattern = \((\d{3,4})\)(\d{7,8})这一句告诉查找引擎,按照它规定的条件查找符合要求的字符串。再看一个简单的例子:例2,把字符串“这有一本关于VBA的书,它在第二个书柜里”里的书换为“book”。Private Sub CommandButton2_Click()Dim regEX As New RegExpregEX.Global = True‘设置查找返回全部匹配regEX.IgnoreCase = FALSE‘设置查找不区分大小写regEX.Pattern = 书Range(a12) = regEX.Replace(这有一本关于VBA的书,它在第二个书柜里, book)End Sub3、正则表达式的工作原理我们需要找出目标字符串中所有的“书”字,根据我们的要求写出正则表达式:”书”,通过regEX.Pattern = 书这句把我们的要求以正则表达式的形式告诉查找引擎(本例中正则表达式规定的条件很简单:符合要求的字符串必须是字符“书”),查找引擎从目标字符串的第一个字符开始查找,找到符合正则表达式要求的字符串后就存储起来,然后继续向后查找直到结束。最后,把找到的所有符合要求的字符串以集合的形式返回。(关于返回的集合后面会详细介绍)4、正则表达式对象有四个属性:Global:设置为true表示查找引擎返回找到的所有符合要求的子字符串,设置为false表示只返回找到的第一个符合要求的子字符串。IgnoreCase:设置为true表示查找时忽略大小写,设置为FALSE表示查找时区分大小写。Pattern:存放正则表达式,如例2一样regEX.Pattern = 书MultiLine:不用多说了吧。5、正则表达式对象有三个方法:Execute方法:语法object. Execute(sourcestring as string) as string, object为你定义的正则表达式对象(如:regEX),参数sourcestring为要对其进行查找的字符串(如例中的这有一本关于VBA的书,它在第二个书柜里)。Execute方法查找并返回符合要求的字符串的集合,相当于使用“查找”功能。Test方法:语法object. Execute(sourcestring as string) as string,其结构和用法和Execute方法一样,它和Execute方法唯一不同的是Test方法只进行测试查找,而不会返回符合要求的子字符串集合。一般用它判断是否可以找到符合要求的字符串。Replace方法:语法object. Replace(sourcestring as string,Replace) as string, object为你定义的正则表达式对象,参数sourcestring为要对其进行查找的字符串, 参数Replacevar为要替换成的内容(如例中的book)。Replace方法查找并返回符合要求的字符串的集合,然后对集合里
显示全部