他山之石——在VBA中使用正则表达式-Part1(Regular Expression)

  • Post author:
  • Post category:其他


相比一些常用的字符串操作函数,正则表达式才是王者啊,功能强大很多!

'一 正则表达式

   '正则表达式是处理字符串的外部工具,它可以根据设置的字符串对比规则,进行字符串的对比、替换等操作。
   
   '正则表达式的作用:
     '1、完成复杂的字符串判断
     '2、在字符串判断时,可以最大限度的避开循环,从而达到提高运行效率的目的。
   
'二 使用方法
   
   '1、引用法
   '点击VBE编辑器菜单:工具 - 引用,选取: Microsoft VBScript Regular Expressions 5.5,引用后在程序开始进行如下声明
     'Dim regex As New RegExp
     Sub t1()
       Dim reg As New RegExp
     End Sub
     
    '2、直接他建法
'     代码引用 (后期绑定)
'     Dim regex As Object
'     Set regex = CreateObject("VBScript.RegExp") '创建正则对象

     Sub t2()
       Dim reg As Object
       Set reg = CreateObject("VBScript.RegExp")
     End Sub

 '三 常用属性
    
    '1 Global属性:
       '如果值为true,则搜索全部字符
       '如果值为False,则搜索到第1个即停止
       '1 例:
       Sub t3()
         Dim reg As New RegExp
         Dim sr
         sr = "ABCEA"
         With reg
           .Global = True
           .Pattern = "A"
           Debug.Print .Replace(sr, "")
         End With
       End Sub
       
    '2 IgnoreCase 属性
       '如果搜索是区分大小写的,为False(缺省值)True不分
    
    '3 Pattern 属性
       ' 一个字符串,用来定义正则表达式。缺省值为空文本。
    '4 Multiline 属性,字符串是不是使用了多行,如果是多行,$适用于每一行的最后一个
       
       Sub t4()
         Dim reg As New RegExp
         Dim sr
         sr = "AEA" & Chr(10) & "ABCA"
         With reg
           .Global = True
           .MultiLine = True
           '.Pattern = "A$"
           .Pattern = "^A"
           Debug.Print .Replace(sr, "")
         End With
       End Sub
       
     '5  Execute 方法
         '返回一个 MatchCollection 对象,该对象包含每个成功匹配的 Match 对象,
         '返回的信息包括:
           'FirstIndex:开始位置
           'Length; 长度
           'Value:长度
       Sub t5()
         Dim reg As New RegExp
         Dim sr, matc
         sr = "A454BCEA5"
         With reg
           .Global = True
           .Pattern = "A\d+"
           Set matc = .Execute(sr)
         End With
         Stop
       End Sub
     
       Function ns(rg)
         Dim reg As New RegExp
         Dim sr, ma, s, m, x
         With reg
           .Global = True
           .Pattern = "\d*\.?\d*"
         Set ma = .Execute(rg)
           For Each m In ma
              s = s + Val(m)
           Next m
         End With
        ns = s
       ' Stop
       End Function
       
     '6、Text方法
        '返回一个布尔值,该值指示正则表达式是否与字符串成功匹配。其实就是判断两个字符串是否匹配成功
        Sub t7()
         Dim reg As New RegExp
         Dim sr
         sr = "BCR6EA"
         With reg
           .Global = True
           .Pattern = "\d+"
           If .test(sr) Then MsgBox "字符串中含有数字"
         End With
        End Sub

Function 提取中文(rg As String, k As Integer)

  Dim regx As New RegExp
  With regx
   .Global = True
   If k = 1 Then
   
    .Pattern = "\D"
    
   ElseIf k = 2 Then
   
    .Pattern = "\w"
    
   End If
   
   提取中文 = .Replace(rg, "")
  End With

End Function



版权声明:本文为hpdlzu80100原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。