美文网首页
VBA-TG第7节|正则表达式

VBA-TG第7节|正则表达式

作者: 努力奋斗的durian | 来源:发表于2019-04-20 16:59 被阅读0次

    最近更新:'2019-04-20'

    1.正则表达式、文字、元字符
    2.贪婪与懒惰搜索、字符类、分组等
    2.正则表达式替换内容

    1.正则表达式、文字、元字符

    正则表达式是字符串(文本)的结构

    案例1:

    从以下文件找到所有的电话号码.



    解决方案

    1. 首先确定数字的结构特征


    2. 用word的查找功能,通过用正则表达式表达数字的结构特征进行查找.



    案例2:

    从以下文件找到所有的电话号码,并且将电话号码后4位数更改为xxxx,起到保密的作用.



    用word的替换功能,,通过用正则表达式表达数字的结构特征进行替换.



    注意事项:

    1.1正则表达式重复结构


    1.2指代特定内容的元字符

    image.png

    2.贪婪与懒惰搜索、字符类、分组等

    案例1

    想找出一下文字中的加号计算( 3+5 2+7).具体文字如下:

    在VBA中,运算符与平时我们手写的算术符
    号几乎相同,比如:3+5  2+7
    
    以及5*3  6*4 等等。不过除此之外,还有一
    些特殊的运算符,比如反斜线\,代表整除
    操作,比如:5\3,9\4等等。
    

    在正则表达式测试器写上

    \d\+\d
    
    案例2

    想找出一下文字中的除法计算( 5\3 9\4).具体文字如下:

    在VBA中,运算符与平时我们手写的算术符
    号几乎相同,比如:3+5  2+7
    
    以及5*3  6*4 等等。不过除此之外,还有一
    些特殊的运算符,比如反斜线\,代表整除
    操作,比如:5\3,9\4等等。
    

    在正则表达式测试器写上

    \d\\\d
    

    案例3

    将以下带有转或接这样的电话号码提取出来.

    024-84016733   010+65825901
    010-43638193   400转71380726
    024转60434942   010+87330711
    010转73670432   400-12341234
    023接54681804   400#60846786
    400+63292216   800接84905011
    021-83310410   400-80564466
    024+59945574   023转81342973
    800#80008000   024转87290359
    

    在正则表达式测试器写上

    \d{3}[转接]\d{8}
    

    结果如下:


    案例4

    将以下带有(转,接,+,#)符合的电话号码提取出来.

    024-84016733   010+65825901
    010-43638193   400转71380726
    024转60434942   010+87330711
    010转73670432   400-12341234
    023接54681804   400#60846786
    400+63292216   800接84905011
    021-83310410   400-80564466
    024+59945574   023转81342973
    800#80008000   024转87290359
    

    在正则表达式测试器写上

    \d{3}[转接+#]\d{8}
    
    或者
    \d{3}[^-\d{8}
    

    结果如下:



    3.外部对象、RegExp、捕获组、替换

    3.1RegExp介绍


    直接引用不属于excel的VBA语言会报错.对于这种不属于excel的VBA语言,则称为外部对象.

    3.2外部对象介绍


    使用外部对象,必须要引用Object数据类型,必须声明如下:

    Dim myReg As Object
    

    myReg是代表一个对象,但不确定是什么类型的对象.比如正则表达式对象.



    因此需要给myReg指定一个具体的对象类型.在VBA需要增加一行代码,如下:

    Set myReg = CreateObject("vbscript.regexp")
    

    关于CreateObject函数的介绍,具体如下:


    3.3正则表达式的测试

    一般正则表达式的捕获是通过正则表达式测试工具进行测试(正则表达式的测试软件),测试结果语法没有问题,再将正则表达式放入到VBA.

    首先我们对里面的数据进行正则表达分析,具体如以下截图:


    对正则表达式进行测试.

    \s*\S+电话\s*\d+[-#]\d+
    

    测试结果没有任何的问题,具体截图如下:


    3.4正则表达式的属性

    3.4.1 RegExp.Pattern


    如果正则表达式里面也需要一个双引号,则在语句里面再加一个双引号,具体案例如下:

    3.4.2 RegExp.Global
    3.4.3 RegExp.Execute
    3.4.4 Matches对象以及Match对象

    Matches对象相当于所有的查询结果.而Match对象相当于单个查询结果.



    需要增加2行代码

    Dim myMatches As Object, myMatch As Object
    Set myMatches = myReg.Execute(s)
    

    通过Matches.Count属性获取查询结果,除了用Matches.Count属性,还可以通过for each in的方式获取查询结果.

    提取的号码写入到单元格中



    VBA的正则表达式与正则表达式测试器类比



    那么如何将姓名以及电话分别提取出来呢?
    增加一个()即可

    3.4.5用正则表达式实现高级替换

    $n代表第n个圆括号中捕获的内容

    如果替换的内容是$1:$2,那么这又代表什么意思呢?


    替换后的结果如下:



    那么如何用vba对查询的内容进行替换呢?



    注意事项,如下:


    相关文章

      网友评论

          本文标题:VBA-TG第7节|正则表达式

          本文链接:https://www.haomeiwen.com/subject/zidziqtx.html