Excel 如何使用正则表达式

原文链接:给你的Excel增加正则处理函数,简直如虎添翼

上文的VBS代码容易出错,且re_extract函数没有把每个捕获组展开输出,以下为完善后的代码:

Option Explicit
 
Public Function re_replace(sText As String, pattern As String, repl As String)
    Dim oRegExp As Object
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        .Global = True 'True表示匹配所有, False表示仅匹配第一个符合项
        .IgnoreCase = False '区分大小写
        .pattern = pattern
        re_replace = .Replace(sText, repl)
    End With
End Function
 
Public Function re_find(sText As String, pattern As String)
    Dim oRegExp As Object, match As Object, matches As Object
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        .Global = True 'True表示匹配所有, False表示仅匹配第一个符合项
        .IgnoreCase = True '不区分大小写
        .pattern = pattern
        Set matches = .Execute(sText)
    End With
    
    Dim d As Object
    Set d = CreateObject("Scripting.Dictionary")
    Dim indexKey As Integer
    indexKey = 1
    For Each match In matches
        d.Add indexKey, match
        indexKey = indexKey + 1
    Next
    re_find = d.Items
End Function
 
 
Public Function re_extract(sText As String, pattern As String)
    Dim oRegExp As Object, match As Object, matches As Object, subMatch As Variant
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        .Global = True 'True表示匹配所有, False表示仅匹配第一个符合项
        .IgnoreCase = True '不区分大小写
        .pattern = pattern
        Set matches = .Execute(sText)
    End With
    
    Dim d As Object
    Set d = CreateObject("Scripting.Dictionary")
    Dim indexKey As Integer
    indexKey = 1
    For Each match In matches
        If match.SubMatches.Count > 1 Then
            For Each subMatch In match.SubMatches
                If subMatch <> "" Then
                    d.Add indexKey, subMatch
                    indexKey = indexKey + 1
                End If
            Next
        Else
            d.Add indexKey, match
            indexKey = indexKey + 1
        End If
    Next
    re_extract = d.Items
End Function

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值