|
1、正则表达式能干什么呢?
你肯定用过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 = "\((\d{3,4})\)(\d{7,8})"‘设置正则表达式
For i = 1 To 7
Range("c" & i) = regEX.Replace(Range("a" & i), "$1-$2")
Next
End Sub
2、什么是正则表达式?
简单的说,正则表达式就是一个由一组具有特殊含义的字符组成的字符串,(如例中的"\((\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 RegExp
regEX.Global = True‘设置查找返回全部匹配
regEX.IgnoreCase = FALSE‘设置查找不区分大小写
regEX.Pattern = "书"
Range("a12") = regEX.Replace("这有一本关于VBA的书,它在第二个书柜里", "book")
End Sub
3、正则表达式的工作原理
我们需要找出目标字符串中所有的“书”字,根据我们的要求写出正则表达式:”书”,通过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")。
看到这,你会发现使用正则表达式很容易,关键是如何根据具体要求写出正确的正则表达式,这是学习的主要内容。 |
评分
-
6
查看全部评分
-
|