资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
正则表达式学习总结1-Wpxxsyzx老师作品http:/club.excelhome.net/thread-750695-1-1.html1、 正则表达式能干什么呢? 你肯定用过excel的“查找”、“替换”功能。正则表达式也可以对字符串进行特定的复杂查找和替换,但它比“查找”和“替换”功能强大的多的多。 正在看蓝桥玄霜版主的字典帖,选了其中的两个例子(附件中的例A和例B),你看到的第一反应是用字典去解决,例A和例B使用正则表达式也很好的解决了问题。(给出这两个例子不是说正则表达式比字典好,只是借此体会正则表达式的强大功能)例1、有如下一组电话号码,如何改变成右侧的样式。(020)12345678 020-12345678(021)32145678 021-32145678(0371)45678129 0371-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 7 Range(c & i) = regEX.Replace(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.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方法查找并返回符合要求的字符串的集合,然后对集合里的字符串进行替换。相当于先使用“查找”功能然后再使用“替换”功能。6、使用正则表达式的步骤:要在VBA中使用正则表达式,首先要“工程”“引用”里添加对“Microsoft VBScript Regular Expressions 5.5”的引用。(当然,你也可以采用后期绑定的方法)。第一步:引用 “Microsoft VBScript Regular Expressions 5.5”第二步:然后根据实际情况设置正则表达式的属性。1、设置Global属性的值由于我们要替换所有的“书”字,而不是只替换第一个“书”字,所以设置Global属性为TRUE即regEX.Global = True。2、设置IgnoreCase属性的值由于我们要查找替换的是汉字,无所谓大小写,所以设置IgnoreCase属性为FALSE即regEX.IgnoreCase = FALSE。第三步、把我们要找的字符串必须符合的条件写成则表达式,并赋值给Pattern属性(例中是regEX.Pattern = 书)第四步:然后根据具体要求选择适当的方法,因为我们不仅要查找符合要求的字符串,而且还要对其进行替换,所以采用Replace方法。(例中是regEX.Replace(这有一本关于VBA的书,它在第二个书柜里, book)。看到这,你会发现使用正则表达式很容易,关键是如何根据具体要求写出正确的正则表达式,这是学习的主要内容。对学过的东西进行总结就是最好的复习和巩固,将来生疏了还可以作为资料查询匹配单个字符1、全字匹配。例3、把“中华人民共和国河南升鹤壁市浚县”中的“升”字改为“省”。分析:我们的要求很简单,就是要找到确定的字“升”。根据我们的要求写出正则表达式,正则表达式规定符合要求的字符串必须满足的要求:1、它是单个字符,2、该字符必须是“升”字。如何把这个条件写成正则表达式呢?以后一律用“要求”代表“符合要求的字符串必须满足的要求”解决:所有的单个的大小写字母、数字,以及后面将要讲到的特殊字符,都是一个正则表达式,例如: “i”就是一个正则表达式。它所描述的要求就是:符合要求的子字符串必须就是单个字符“i”。所以:正则表达式:”升” 替换为:”省”例4、把“中华人民共和国河南省鹤壁市浚县”中的“华人民共和”字去掉。分析:我们的需要的是:找到字符串“华人民共和”。要求:1、它由5个字符组成,2、该字符串就是“华人民共和”。解决:如果需要查找的是一个字符串,只需依次写出这些字符,这些字符组成的字符串也是正则表达式。所以:正则表达式:”华人民共和”替换为:”说明:如果替换的内容为空字符串就相当于把找到的内容删除。总结:这种正则表达式是最简单的,直接把要查找的字符串作为正则表达式即可。由于这种匹配方式只能匹配与正则表达式完全相同的字符,所以也叫“全字匹配”。2、匹配任意单个字符例5、把列表中的所有数据改成正确的“中华人民共和国河南升鹤壁市浚县”。分析:我们的要求是:无论”中”字后是什么字符,该字符和”中”组成的字符串都是要找的。要求: 1、第一个字符为“中”,2、第二个字符可以为任意字符。第2个条件如何表示呢?解决:我们可以用”.”表示任何任意的单个字符、英文字母、数字,以及它本身。就是说要查找的字符不确定是什么时,可在该位置用“.”代替,表示该位置可以为任何字符。所以:正则表达式:”中.”替换为:”中华”说明:无论”中”字后是什么字符,该字符和”中”组成的字符串都符合正则表达式”中.”的要求。例6、把列表中的所有数据改成正确的“中华人民共和国河南升鹤壁市浚县”。分析:我们的要求是:无论”人民”之前和之后是什么字符,该字符和”人民”组成的字符串都是正确的。要求: 1、第1个字符可以为任意字符,2、第2第3个字符为”人民”,3、第4个可以为任意字符。所以:正则表达式:” .人民.”替换为:”华人民共”说明:“.”可以和其他字符任意组合使用。例7、把列表中的所有数据改成正确的“中华人民共和国河南升鹤壁市浚县”。分析:我们的要求是:“中”字后面可以是五个任意的字符。条件:1、共6个字符,2、第1个字符”中”,3、其余五个字符每个都可以为任意字符。所以:正则表达式:”中.”替换为:”中华人民共和”说明:“.”可以连续使用,每个“.”表示该位置可以为一个任意字符。3、匹配“.”元字符例8、把“bookb.xls”改为“bookB.xls”。分析:我们的要求是找到字符“.”前的“b”,就是说”.”应该只代表它本身而不代表字符“o” 或其他任意字符。要求: 1、第1个字符是”b”,2、第2个字符为”.”。所以:正则表达式:” b.”替换为:”B.”正则表达式如果写成” b.”,你会得到一个错误结果:“B.okB.xls”,因为正则表达式” b.”中的”.”所描述的条件是:1、第1个字符是”b”,2、第2个字符为任意一个字符,因为字符“o”属于任意一个字符的范畴,所以”bo”也是符合要求的。 说明:有的时候,我们不想让“.”代表任何的字符,仅仅想让它代表“.”这个字符(也就是它本身),此时,可以使用“.”来对它进行转义。字符“.”在正则表达式中有双重含义:既可以表示任意字符又可以只代表它本身(后面还会接触到更多此类字符),如果要在正则表达式中让这些字符只代表它本身,需要在它们之前加上“”。匹配指定的单个字符1、匹配字符组例9、把数字编号1、2和8的戒指的编号删除,其余的不变。分析:我们需要的字符串是:”戒指1”、”戒指2“ 和”戒指8“,而其他的排除在外。就是说第2个字符的内容不确定,只有第2个字符是指定的几个字符时,它们中的任意一个和“指”组成的字符串都是符合要求的。要求:1、第1个字符为“指”,2、第2个字符可以是1也可以是2,还可以是8,不能是其他字符。正则表达式“指.”显然不对,它让“戒指5”和“戒指8“等也成为符合要求的字符串。解决:这种情况可以使用字符组。它的语法是 “dt”。 “dt”是我们指定的符合要求的字符组合,它的含义是:“dt”所在位置的字符是可以变化的,从“d ”或者“t”里任先一个都是符合要求的,但该处不能是任意字符。相当于缩小了范围的“.” 。“”本身不参与字符匹配,它仅仅是字符组的标识。“”里的字符没有先后顺序之分,可以任意排列。所以:正则表达式:”指128”替换为:”指”说
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号