VBA-正则表达式

1.写好正则表达式,在数据截取处理中是十分有优势的,以下举几个例子来学习一下正则表达式的用法

Option Explicit
Public Function getnum2(str As String)
With CreateObject("VBScript.RegExp")
    .Global = False '全局匹配
    .Pattern = "\d+" '正则表达式,匹配数字
    If .Test(str) Then '先进行测试,匹配的话就执行,不匹配的话就返回空值
        getnum2 = .Execute(str)(0)
    Else
        getnum2 = ""
    End If
 End With

End Function
Public Function getnum3(str As String)
With CreateObject("VBScript.RegExp")
    .Global = False '全局匹配
    .Pattern = "[a-zA-Z]+" '正则表达式,匹配字母
    If .Test(str) Then '先进行测试,匹配的话就执行,不匹配的话就返回空值
        getnum3 = .Execute(str)(0)
    Else
        getnum3 = ""
    End If
 End With

End Function
Public Function getnum4(str As String)
With CreateObject("VBScript.RegExp")
    .Global = False '全局匹配
    .Pattern = "[\u4e00-\u9fa5]+" '正则表达式,匹配汉字
    If .Test(str) Then '先进行测试,匹配的话就执行,不匹配的话就返回空值
        getnum4 = .Execute(str)(0) '正则表达式
    Else
        getnum4 = ""
    End If
 End With

End Function
Public Function getnum4(str As String)
With CreateObject("VBScript.RegExp")
    .Global = False '全局匹配
    .Pattern = "\w+@[a-zA-Z]+\.[a-zA-Z]{2,3}" '正则表达式,匹配邮箱
    If .Test(str) Then '先进行测试,匹配的话就执行,不匹配的话就返回空值
        getnum4 = .Execute(str)(0) '正则表达式
    Else
        getnum4 = ""
    End If
 End With

End Function

2.我们来测试一下上面的函数,在Excel表中使用该函数即可,其效果如下面所示

### VBA 中使用正则表达式的编程指导 在 VBA (Visual Basic for Applications) 编程环境中引入正则表达式功能可以极大地增强字符串处理能力。为了实现这一点,通常会利用 `VBScript.RegExp` 对象[^2]。 创建并配置正则对象如下所示: ```vba Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") With regEx .Global = True ' 设置全局匹配模式 .IgnoreCase = True ' 忽略大小写 .Pattern = "your_pattern_here" ' 定义要使用的正则表达式模式 End With ``` 上述代码片段展示了如何实例化一个正则表达式对象以及设置其基本属性。其中 `.Global` 属性决定了是否执行整个输入串中的所有匹配;`.IgnoreCase` 控制着是否区分字母大小写的敏感度;而最核心的部分则是通过 `.Pattern` 来指定具体的正则表达式规则。 对于实际应用而言,假设有一个需求是要找出给定文本里所有的电子邮件地址,则相应的正则表达式可能是这样的形式 `\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z]{2,}\b` 。下面是一个完整的例子说明怎样用此方法提取邮件列表: ```vba Sub ExtractEmails() Dim inputText As String Dim matches As Object Set regEx = CreateObject("VBScript.RegExp") With regEx .Global = True .IgnoreCase = True .Pattern = "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z]{2,}\b" If .Test(inputText) Then Set matches = .Execute(inputText) For Each match In matches Debug.Print match.Value Next match Else MsgBox ("No emails found.") End If End With End Sub ``` 这段程序首先定义了一个用于存储待分析文本变量 `inputText` 和用来保存找到的结果集合 `matches` ,接着按照前面介绍的方式初始化了正则引擎参数,并调用了测试函数确认是否存在符合条件的数据项。如果确实存在的话就遍历每一个发现的对象打印出来;反之给出提示信息告知用户未检测到任何邮箱地址。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值