Excel VBA(06)正则表达式

概述

一、正则支持

  • 正则的概念就不说了,就是用特殊的字符串进行字符串的匹配
  • vba 本身是不支持正则的,需要引入外部的支持
    Excel VBA(06)正则表达式_第1张图片

二、基本用法

1、示例代码

Sub text()
    Dim reg As New RegExp
    sr = "ABCA"
    Dim ret
    With reg
        .Global = True
        .Pattern = "A"
        .MultiLine = True
        Set ret = .Execute(sr)
    End With
    For Each r In ret
        Debug.Print r
    Next r
End Sub

2、细节说明

  • 创建正则对象还可以通过createObject("vbscript.regexp")
  • Global 属性代表是否进行全局匹配,false 的话就返回匹配的第一个,true的话会搜索全部的字符
  • multiline是设置是否进行多行的匹配,存在换行符的时候可以使用
  • Pattern 是最核心的设置我们的匹配的规则
  • ignoreCase属性可以设置是否区分大小写
  • 最后的Execute 方法可以返回匹配的结果集合,结果集包含的信息包括firstIndex、length、value
  • 如果采用 test方法的话返回的就是true 或者false
  • 结果集可以使用for 进行遍历输出

特殊符号

一、\

  • 换行符、制表符等中使用:\r \n \t
  • 用来转义使用:\$ \.
  • 特殊意义符号使用,大写的时候表示非
\d--匹配数字
\w--匹配数字或字母
\s--匹配空格、制表符等

二、.

  • 匹配除换行符以外的任意字符

三、+ * ?

  • 代表出现0次或者1次
  • * 代表0、1、无数
  • + 代表至少一次

四、{}

  • {n}
  • {n,m}
  • {n,}

1、正则对象的replace(sr," ")方法是将匹配的内容进行置换,所以只有两个参数
2、.*匹配所有是贪婪模式,是尽可能多进行匹配.*?是比较合理的通用匹配方式

五、[]

  • 匹配一个:[ABC]
  • 非括号内容:[^a]
  • 范围匹配:[a-z]

六、()

  • 括号内的内容作为一个整体
  • \num 可以进行括号内容的引用,具体的后面的数字匹配的顺序是前后外内
Sub test()
    Dim reg As New RegExp
    Dim sr As String
    sr = "A2A2B4B4QB41133AA33"
    With reg
        .Global = True
        .MultiLine = True
        .Pattern = "((A2){2})((B4){2})Q\4"
        Debug.Print .Replace(sr, "")
    End With
End Sub
'output:1133AA33
  • (?=str) (?!str)都可以进行预搜索,特点就是仅仅进行判断,不会占用匹配的位置
Sub test()
    Dim reg As New RegExp
    Dim sr As String
    sr = "1005030元"
    Dim ret
    
    With reg
        .Global = True
        .Pattern = "(?=.*)\d+"
        '.Pattern = "\d+(?=元)"  
        Set ret = .Execute(sr)
    End With
    For Each r In ret
        Debug.Print r
    Next r
End Sub
Sub test()
    Dim reg As New RegExp
    Dim sr As String
    sr = "Aaaa9"
    Dim ret
    
    With reg
        .Global = True
        .Pattern = "^(?=.*\d).{4,8}$"
        Set ret = .Execute(sr)
    End With
    For Each r In ret
        Debug.Print r
    Next r
End Sub
  • ()|联合使用主要用来简化我们的书写:A\d+|B\d+(A|B)\d+效果相同

七、^ $

  • 就是首尾匹配

八、\b

  • 单词边界的匹配

九、|

  • 就是一个或者的逻辑:A\d+|B\d+(A|B)\d+效果相同, A|B\d+和前二者不同

十、\un

  • 就是unicode 的表示,n为4位16进制,主要的应用就是汉字的筛选
  • 汉字的 unicode 编码是4e009fa5

提取我们要的字符串的时候一般2种方法:要么直接匹配我们要的字符串,要么将我们不要的给剔除

你可能感兴趣的:(其他)