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。
浙公网安备 33010602011771号