VBA正则表达式入门与提高(3)

2019-07-13 17:32

正则表达式入门与提高

Dim regx,S$,Strnew$ 1.定义变量代码段

S=”正则表达式其实很简单 “ 2.目标文本字串变量赋值代码段 Set regx=createobject(“vbscript.regexp”) 3.创建正则对象代码段 Regx.pattern=”\\s+$” 4.设置正则对象的pattern属性代码段 Regx.global=true 5.设置正则对象的其它属性代码段 Strnew=regx.replace(s,””) 6.应用正则对象方法代码段 Msgbox strnew 7.处理返回值代码段 End sub

1.定义变量代码段

不必讲解了吧.

2.目标文本字符串赋值代码段

目标文本,可能存在于文本文档、Word文档、HTML文档或Excel文档等文档之中。正则对象并不能直接作用于这些文档,只能作用于它们的副本。所以用VBA正则处理这些文档,必须首先从这些文档中读出字符串并赋值于字符变量。如果任务是修改文本,那么,你可能需要编写额外的代码将修改后的文本字符串重新写回原文档中.

例:假如目标文本存在于当前表格A1单元格中.可使用下列代码赋值于字符变量S S=Activesheet.[a1]

目标文本也可能分别存在于一个数组中,那么,你可能需要通过循环逐一处理.

你也可以直接以输入的方式,赋值给字符变量,就像上面的例子.这时特别注意的是:半角双引号是VBA语言中的保留字符,如果目标文本中本身含有半角双引号,则必须转义,转义方法是:用重复的双引号表示一个双引号.

例:目标文本为:”我们用”汗牛充栋”、”学富五车”形容一个人读的书、拥有的知识多。”. 将之赋值给S的代码为:

S=”我们用””汗牛充栋””、””学富五车””形容一个人读的书、拥有的知识多。”

3.创建正则对象代码段

文本处理的各种操作,都是通过操作正则对象来完成的.所以必须创建正则对象.VBA创建或声明正则对象有两方式:早期绑定和后期绑定,你可以根据自己喜好选择其一:

9

VBA平台的正则学习参考资料

早期绑定: (需要在VBE--工具--引用中勾选Microsoft VBScript Regular Expressions 5.5) Dim regx AS RegExp

Set regx=new regexp (或dim regx as new regexp) 后期绑定:

Set regex = CreateObject(\

利用上述两种方式创建或声明正则对象,实际上是调用Microsoft VBScript脚本的regexp正则对象。Microssoft VBScript脚本,包含在Internet Eeplorer 5.5以及之后的版本中.该脚本中的正则表达式执行的是ECMA-262第3版所规定的标准,与JavaScript脚本中的正则执行标准是相同的。1.0版只是为了向后兼容的目的,功能很弱。

(提示:在VBA中也可调用JavaScript(Jscript)或ruby等脚本中的正则对象,Jscript的元字符及特性与VBscript是一样的,但它的方法或属性要多一点,或者说对正则的支持更强一些.ruby本人不懂,不太了解它的元字符集,只是看到论坛上有人使用)

4.设置对象的pattern属性

语法:object.pattern=”正则表达式” Object是一个正则对象.

把自己编制的正则表达式,以字符串的形式赋值给pattern属性。注意要用英文双引号将正则表达式包围起来.

并且要在对象名与属性名之间用英文点号隔开.属性名pattern是保留字,固定不变的,对象名是用户自定义的。

接下来的两个步骤是对正则对象的操作,通过设置或使用正则对象的属性和方法,以实现对文本的处理.正则对象的属性和方法不多,列表于下:

5.设置对象的其它属性

除Pattern属性外,正则对象还有其它三个属性,其属性值有False和True,默认值都是False。如果要使用默认属性,可以不用显示设置;如果要改变默认属性,则需要显示设置:

Global 当属性值为False时,只要在目标文本中,找到一个匹配时,即停止搜索。如果想要找出目标文本

10

正则表达式入门与提高

中的所有匹配,那么需要把它的属性值设置为True。

IgnoreCase 设置对英文字母大小写是否敏感。默认值False, 对大小写敏感;设置为True,忽略大小写. MultiLine 它影响且只影响元字符^和$的意义。值为False,无论目标文本是多少行,整个文本中则只有一个开始位置,^表示第一行的开始;只有一个行结束位置,$表示文本末尾位置。值为True,那么,^和$分别表示每一行的行首和行尾位置。

下面来完成一个简单的任务,再具体认识各属性的使用方法: 有一两行的文本: Aaa Bbb 任务要求:

1.在文本开始和结束处,分别插入一个”@”符号; 2.在文本每行的开始和行尾分别插入”@”符号。 正则表达式:

^|$ 表示匹配行开始或结束位置 任务1代码: Sub test1() Dim reg, s$

s = \这里用vblf 表示行之间的换行符 Set reg = CreateObject(\ reg.Pattern = \ reg.Global = True s = reg.Replace(s, \ MsgBox s End Sub 讨论:

Msgbox 最后显示的结果为: @Aaa Bbb@

代码中修改了global的默认属性值,设置为true;目的是保证能找到并替换全部的开始或结束位置。如果保持默认属性,则只会在开始处插入一个@号。

正则对象Reg的其它两个属性保持为默认。因为本任务无关乎字母大小问题,所以IgnoreCase属性

11

VBA平台的正则学习参考资料

无需要设置为Ture(当然如果设置为true,对最后结果也无影响);由于Mutiline属性保持默认,其值为False,所以整个文本只有一个开始位置和一个结束位置。

代码中使用了对象reg的replace方法,它的作用是,将在目标文本中找到的匹配(开始和结束位置)替换为”@”字符,在这里实际上是插入。然后把修改后的文本返回,重新赋值给字符变量S。

任务2代码: Sub test2() Dim reg, s$

s = \

Set reg = CreateObject(\ reg.Pattern = \ reg.Global = True reg.MultiLine = True s = reg.Replace(s, \ MsgBox s End Sub 讨论:

任务2代码与任务1代码唯一区别是修改了mutiline默认属性,设置为True。这就意为着,该文本的每一行都存在一个开始位置和结束位置。所以Msgbox最后显示的结果为:

@Aaa@ @Baa@

6.应用对象的方法代码段

VBScirpt正则对象的方法共有三个:你可以根据任务要求选择使用一个或多个方法. (1)TEST方法

语法:Object.Test(string)

Test方法只是简单测试目标文本中,是否包含正则表达式所描述的字符串。如果存在,则返回True,否则返回False。

例:用代码检测用户的输入是否是一个电子邮箱。 Sub ChkEmail()

12

正则表达式入门与提高

Dim reg, s$

s = InputBox(\请输入一个电子邮箱:\ Set reg = CreateObject(\ reg.Pattern = \ If reg.Test(s) Then

MsgBox \你输入的电子邮箱格式正确: \ Else

MsgBox \你输入的电子邮箱格式不正确!\ End If End Sub 讨论:

代码从用户那里获得字符串,然后赋值与字符变量S。验证邮箱的正则表达式非常简略,元字符序列\表示不是空格的任意一个字符,后面紧跟一个+号表示一个以上字符。这个表达式事实上只验证了用户的输入里,在字符串之间是否有一个@符号。它甚至认为”0@中”都是正确的。下面给出一个更为严格的电子邮箱正则表达式:“^[\\w.-]+@[\\w.-]+$”当然要严格按电子邮箱规范写出正则表达式,可能就十分复杂,由于我们刚刚接触正则,就不在详细讨论了。

这里要关注的是,test方法的语法,在方法与正则对象之间也是用英文点号隔开,作为参数,目标字符串用英文括号包围。在这个例子中,如果Test返回的是true,表示目标文本S中找到了正则模式的匹配。则显示正确结果,否则显示错误提示。

(2)Replace方法

替换在目标文本中用正则表达式查找到的字符串。 前面例子中语句体现其语法:s=reg.replace(s,”@”)

后面括号中的参数S,代表前面代码中设置的目标文本字符串.也就是正则表达式将要作用的目标文本.”@”是用来替换的字符串参数.前面的s是Replace方法返回的结果,它是目标文本被替换后的一个副本. 如果没有找到匹配的文本,将返回与目标文本一样的一个副本.

下面继续讨论Replace方法的第二个参数:

例子中\是一个字面字符,要用一对双引号包围起来。第二个参数还可以是变量、表达式。如果是变量或函数则不能用双引号包围,这一点和VBA代码规则是一致的.

上一章我们知道了如果在正则表达式中使用了元字符序列()括号,那么被圆括号包围的内容会存储在

13


VBA正则表达式入门与提高(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:叉车司机复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: