EXCEL VBA学习笔记:正则表达式(二)表达式语句写法-vba的正则表达式

2023-08-06 15:00:55

 

正则表达式也分前期绑定与后期绑定。前期绑定:“工具”—>“引用” 选项,然后在“引用”对话框中选中“Microsoft VBScript Regular Expressions 5.5”前的复选框,然后单击“确定”。使用时将一个变量声明为正则对象类型:Dim reg As New RegExp。

后期绑定:通过CreateObject方法创建一个正则 对象:Set reg = CreateObject("vbscript.Regexp")

示例取出价格数字:

Set reg = CreateObject("vbscript.Regexp") 创建正则对象 With reg .Global = True 设置对象的Global属性 .Pattern = "\d+\.?\d?" 设置对象的pattern属性 For Each rn In Range("A1", [A1].End(xlDown)) rn.Offset(0, 1) = .Execute(rn)(0) Next End With

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

Global 属性:当值为False时,只要在目标文本中,找到一个匹配时,即停止搜索。如果想要找出目标文本中的所有匹配,那么需要把它设置为True。

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

Execute方法: 在目标文本中执行正则表达式搜索。

语法:set xe=object.execute(Text);其中xe是用户自定的对象变量,Text为目标文本,object是正则对象,本示例中就reg ,用With后省略书写了。

Execute方法会作用于目标文本(Text),并返回一个叫作"Matches"的集合对象,在这里就是“xe”。因为匹配成功可能不止一次。(如上面的示例,如果数据都放在一个单元格中,就会匹配到3次数字)。在这个集合对象中包含正则找到的所有叫做"Match"的成功匹配对象。如果未找到匹配,Execute 将返回空的 Matches 集合。Matches集合有两个只读属性:索引(Item)和成功匹配的次数(Count)

Matches集合中的一个Item就是一个Match对象。Matches集合中所包含的匹配对象Match有四个只读属性:Value、firstindex、length、submatches。

Execute(rn)(0) 表示的是第1个匹配对象Match值,Match的索引序数从0起,虽然在"本地窗口"中显示的是Item 1。如果用set t = .Execute(rn)(0),t 就Match(0)对象。set t = xe(0),跟前面一样的意思。示例中只需用Match对象的value属性,简写为=.Execute(rn)(0),如果还需用到其它属性,可以如将找到的数字标成红色,就需要用firstindex、length,就得取Match对象。

Match对象的Submatches属性:匹配对象match的Submatches是一个集合属性,它包含正则表达式中用小括号捕捉到的所有子匹配。集合Submatches有两个固有属性:Count和Item。可以通过Item得到集合中的每个值,它实际就是在正则表达式中用小括号捕获的内容;Count值是集合中元素个数,实际上就是正则表达式中小括号的个数。

左图的Submatches即为右图的匹配组。.pattern 中有两个小括号,即产生Submatches中2个Item,为Submatches(0)与Submatches(1)。匹配到了9条记录,即Match对象有9个,每个Match对象有1个Submatches,每个Submatches中有 2条数据。

附注:正则表达式取出的数据都是字符,回到开始示例,取出的数字需要转换一下,才成为数值型。


以上就是关于《EXCEL VBA学习笔记:正则表达式(二)表达式语句写法-vba的正则表达式》的全部内容,本文网址:https://www.7ca.cn/baike/58826.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜