Function ExtractString(inputString As String, pattern As String, Optional order As Integer = 0, Optional matchType As Boolean = True, Optional submatchorder As Integer = 0) As String
    'inputString:表示提取的字符
    'pattern:提取的规则
    'order(可选参数):提取的数据的序号,默认为0
    'matchType(可选参数):是否有分组的数据(提取),默认不提取
    'submatchorder(可选参数):提取分组的序号,默认为0
    Dim regex As Object
    Dim matches As Object
    Dim match As Object
    
    ' 创建 RegExp 对象
    Set regex = CreateObject("VBScript.RegExp")
    
    With regex
        .Global = True ' 匹配所有出现
        .IgnoreCase = True ' 忽略大小写
        .pattern = pattern ' 正则表达式模式
    End With
    
    ' 执行匹配操作
    Set matches = regex.Execute(inputString)
    
    ' 检查是否有匹配结果
    If matches.Count > 0 Then
        ' 提取第一个匹配结果
        Set match = matches.Item(order)
        If matchType Then '根据传入的参数,判断是否提取分组数据
            ExtractString = match.Value
        Else
            ExtractString = match.SubMatches(0) '提取分组的数据
        End If
    Else
        ' 没有匹配结果
        ExtractString = ""
    End If
    
    ' 清理对象
    Set regex = Nothing
    Set matches = Nothing
    Set match = Nothing
End Function

  

该函数,粘贴到Excel的模块中,直接调用即可

 

正则表达式元字符:

.:匹配除换行符以外的任意字符。
^:匹配输入字符串的开始位置。
$:匹配输入字符串的结束位置。
*:匹配前面的元素零次或多次。
+:匹配前面的元素一次或多次。
?:匹配前面的元素零次或一次。
\:用于转义元字符,或表示特殊字符的字面意义。
[]:定义字符类,匹配括号内的任意字符。
|:用于在正则表达式中表示“或”的关系。
():定义捕获组,用于分组匹配或提取匹配的子字符串。
{}:指定前面元素的重复次数。
\d:匹配任意一个数字字符(0-9)。
\w:匹配任意一个单词字符(字母、数字或下划线)。
\s:匹配任意一个空白字符(空格、制表符、换行符等)。
\b:匹配一个单词边界,常用于单词的整体匹配。
表达式案例的写法:

匹配邮箱地址:
regex:
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
该正则表达式可以用于验证常见的邮箱地址格式,包括用户名部分和域名部分。

匹配手机号码:
regex:
^1[3456789]\d{9}$
该正则表达式可以用于验证中国大陆的手机号码,满足11位数字,以1开头。

匹配日期(YYYY-MM-DD):
regex:
^\d{4}-\d{2}-\d{2}$
该正则表达式可以用于验证标准的日期格式,如"2023-06-30"。

匹配IP地址:
regex:
^(\d{1,3}\.){3}\d{1,3}$
该正则表达式可以用于验证IPv4地址,如"192.168.0.1"。

匹配URL:
regex:
^(https?|ftp)://[^\s/$.?#].[^\s]*$
该正则表达式可以用于匹配URL,支持以"http://""https://""ftp://"开头的URL。

 

posted on 2023-06-30 09:57  吃饱饱没烦恼  阅读(689)  评论(0编辑  收藏  举报