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。