VBA提高篇_ 29_30 正则表达式//元字符//特定字符//转义字符//字符组//分组显示_贪婪搜索/懒惰搜索

deerchao.net 正则表达式30分钟教程

1. 元字符:

格式: 元字符+文字
文字: 空格也属于文字

在这里插入图片描述

1.1 元字符

元字符解释
+前面内容出现连续出现1次或多次
*前面内容出现任意次.包括0次
?前面内容出现0次或1次
{n}正好出现n次
{n,m}出现从n到m次

1.2 指代特定内容的字符

特定字符解释
\d数字字符 \D所有非数字字符
\w文字(包括数字和下划线) 字符
\W所有非文字字符
\s空白字符(空格、换行等)
\S所有非空白字符
.所有字符: 但默认时不能代表换行符

1.3 转义字符

转义字符解释
\在正则表达式中,改变后面字符的含义,比如讲元字符转变为普通文字

1.4.字符组

字符组解释
[]字符组代表一个字符,且必须是方括号里边的字符之一,里边的字符至少出现一次
[]内的特殊字符[^]:出现在方括号内第一位,表示非的意思 例:[^-]非-号以外的任意字符注意: ^ 不出现在第一位,则不代表非,就是一个普通的字符
[x-x]出现在两个字符中间,代表范围, 所有编码大于左侧,小于右侧的字符 例: [a-z],[3-8]

在这里插入图片描述
在这里插入图片描述

1.5 分组显示

字符解释-
()将字符分组作为一个整体 例如: \sa(bc)+\s分组后可以显示多列结果.

在这里插入图片描述

Sub myRegx()
    Dim myreg As Object
    Dim Matches As Object, match As Object
    
    Set myreg = CreateObject("VBScript.regexp")
    
    k = 1
    For Each r In Range("a1:a2")
    
        With myreg '正则对象设置
            .Pattern = "([\u4e00-\u9fa5]+)(\d*\.?\d*)([\u4e00-\u9fa5|a-z]+)"
            .ignorecase = True
            .Global = True
            Set Matches = .Execute(r)
          
            i = 2
            For Each match In Matches '获取匹配结果
                For Each subm In match.submatches '获取捕获组 (Capture Group)
                    Cells(k, i) = subm
                    i = i + 1
                Next
            Next     
        End With        
        k = k + 1
    Next
End Sub

1.6 或者 |

字符组解释
|分支: |或者的含义 例如: \sa(bc|de)+\s

在这里插入图片描述

2. 贪婪搜索和懒惰搜索

正则表达式中的 .+*?

转义字符解释
贪婪搜索选取同时符合要求的最长的一个作为最终结果(默认)
懒惰搜索选取同时符合要求的最短的一个作为最终结果(在"多搜索项字符"后边加一个问号)\d.*?\d

在这里插入图片描述

3. 拓展 230708

3.0 环视(零度断言)

环视,也叫零宽断言
它匹配的是一个位置,该位置必须满足零宽断言条件,才能继续往下进行匹配。
由于位置不是字符,它是没有宽度的,所以叫做零宽断言。

3.1 隐式位置/b

  • 如果说字符代表的是显式位置,那么\b代表隐式位置,
    • (例如字符’\ba.+?\b)匹配以a开头的单词⇒ 涉及到懒惰和精确搜索
  • 注意和^ $ 的区分(这两个代表的是行开头和行结尾的标志符号)
  • 详情参考: 正则表达式 \b==>再研究

3.2 ^ 和 $ 行开头和结尾

3.3 [\u4e00-\u9fa5]+ 中文

  • 中文字符的正则表达方式

3.1 ?= ?! 和 ?<! ?<=

  • 环视(零宽断言)四种方式
通义字符解释
?=顺序肯定环视
?!顺序否定环视
?<=逆序肯定环视
?<!逆序否定环视

否定逆序环视:在这个位置的前边(逆序),不能有(否定)条件给出的字符串
肯定逆序环视:在这个位置的前边(逆序),必须是(肯定)条件给出的字符串
否定顺序环视:在这个位置的后边(顺序),不能有(否定)条件给出的字符串
肯定顺序环视,在这个位置的后边(顺序),必须是(肯定)条件给出的字符串

举例:
1234567890
(?<=\d)(?=(\d\d\d)+\b)
执行结果
123,456,789

正则表达式?!的理解

3.5 []{}()

  • 三种括号分别代表的含义

以上3.1-3.5 均在收藏有,详情参见收藏详细用法

字符组解释
[]字符组代表一个字符,且必须是方括号里边的字符之一,里边的字符至少出现一次,字符单独出现(里边的字符没有并列关系,不会同时出现)
()分组/捕获组将字符分组作为一个整体;分组后可以显示多列结果.例如: \sa(bc)+\s
{n}正好出现n次
{n,m}出现从n到m次

特殊:

[^a^i^o^e^u]”条件表示排除a、i、o、e、u 五个字母也可以通过括号进一步简化代码,即采用“[^(aioeu)]”为条件,仅需要使用一次“^"即可。VBA 不会将“aioeu”看作一个整体,它们之间仍然是并列关系,因为它们处于元字符“[]”之间。

3.6 () Capture Group 捕获组VBA用法

  • Matches ⇒ .Execute
  • Match⇒ submatches 捕获组分组的集合
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值