二 EXCEL VBA学习笔记:正则表达式表达式语句写法

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

二 EXCEL VBA学习笔记:正则表达式表达式语句写法

示例取出价格数字:
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)NextEnd 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)
二 EXCEL VBA学习笔记:正则表达式表达式语句写法

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对象 。
二 EXCEL VBA学习笔记:正则表达式表达式语句写法



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

左图的Submatches即为右图的匹配组 。.pattern 中有两个小括号,即产生Submatches中2个Item , 为Submatches(0)与Submatches(1) 。匹配到了9条记录,即Match对象有9个,每个Match对象有1个Submatches,每个Submatches中有 2条数据 。
【二 EXCEL VBA学习笔记:正则表达式表达式语句写法】附注:正则表达式取出的数据都是字符,回到开始示例,取出的数字需要转换一下 , 才成为数值型 。

相关经验推荐