VBA之正则表达式(42)-- 提取代码中变量名称

77 篇文章 6 订阅
49 篇文章 18 订阅

实例需求:待处理代码段如下所示,现在需要提取其中的变量名称。

Public pFactor As Integer
Sub TestCode()
Dim reg As New RegExp, a As Workbook
Dim ms As VBScript_RegExp_55.MatchCollection
Dim m As VBScript_RegExp_55.Match
Dim i, j
Dim x1, y1, z1 As String
Dim x2 As String, y2, z2
Dim x3, y3 As String, z3
Dim x4 As String, y4 As String, z4
Dim i2$, j2&, k2#
Const PRE_RATE = 2.5
End Sub

示例代码如下。

Sub Demo()
    Dim sText, objRegexp, objMH, objMHs, objMHVars, objMHVar
    sText = Trim([a1])
    Set objRegexp = CreateObject("vbscript.regexp")
    objRegexp.IgnoreCase = True
    objRegexp.Global = True
    objRegexp.Pattern = "\b(?:Public|Private|Static|Const|Dim)\b(.+)"
    Set objMHs = objRegexp.Execute(sText)
    objRegexp.Pattern = "(\w+)[^,]*"
    For Each objMH In objMHs
        Set objMHVars = objRegexp.Execute(objMH.submatches(0))
        For Each objMHVar In objMHVars
            Debug.Print objMHVar.submatches(0)
        Next
    Next
    Set objMH = Nothing
    Set objMHs = Nothing
    Set objMHVars = Nothing
    Set objMHVar = Nothing
    Set objRegexp = Nothing
End Sub

【代码解析】
第3行代码读取待处理文本。
第4行代码创建正则对象。
第5行代码设置正则匹配忽略字符大小写。
第6行代码设置正则全局匹配。
第5行代码设置正则匹配模式。

正则表达式说明
`\b(?:PublicPrivate
(.+)匹配至少一个任意字符,第一个匹配组

匹配结果如下图所示。
在这里插入图片描述

第8第行代码执行正则匹配。
第9行代码设置第2此正则匹配模式。

正则表达式说明
(\w+)匹配至少一个(数字、字母、下划线)字符,第一个匹配组
[^,]*匹配非逗号字符,可以不存在

匹配结果如下图所示。
在这里插入图片描述

第10~15行代码循环遍历匹配结果。
第11第行代码再次执行正则匹配。
第12~14行代码循环遍历第2次匹配结果,第13行代码输入匹配结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值