VBA之正则表达式(43)-- 从网页中提取指定数据

实例需求:由网页中提取下图中颜色标记部分内容,网页中其他部分与此三行格式相同。

VBA之正则表达式(43)-- 从网页中提取指定数据_第1张图片


方法1

Sub Demo()
    Dim objRegex As Object
    Dim inputString As String
    Dim objMatches As Object
    Dim objMatch As Object
    Set objRegex = CreateObject("VBScript.RegExp")
    objRegex.Pattern = "id=[^>]+|[^>]+&#[^<]+"
    objRegex.Global = True
    inputString = Cells(1,1).Value
    Set objMatches = objRegex.Execute(inputString)
    For Each objMatch In objMatches
        Debug.Print objMatch
    Next objMatch
End Sub

【代码解析】
第6行代码创建正则对象。
第7行代码设置正则匹配模式。

正则表达式 说明
id=[^>]+ 匹配以id=开头,后面跟一个或者多个除>之外的任意字符
[^>]+&#[^<]+ 匹配以一个或者多个除>之外的任意字符开头,后面为&#,之后为一个或者多个除<之外的任意字符

第8行代码设置正则全局匹配。
第9~11行代码将待处理字符串保存在变量中。
第12行代码执行正则匹配。
第13~15行代码循环遍历匹配结果,第14行代码输出到立即窗口,结果如下图所示。
VBA之正则表达式(43)-- 从网页中提取指定数据_第2张图片


方法2

使用常规正则匹配模式,此正则模式比较容易理解,不再讲解其含义。
方法1中灵活使用了字符集[^……],限制非某字符,也就实现了以该字符为边界的效果,其匹配模式字符串更简洁。

Sub Demo2()
    Dim objRegex As Object
    Dim inputString As String
    Dim objMatches As Object
    Dim objMatch As Object
    Set objRegex = CreateObject("VBScript.RegExp")
    objRegex.Pattern = "(id=""[^""]+"").*?(.*?)<\/text>"
    objRegex.Global = True
    inputString = Cells(1,1).Value
    Set objMatches = objRegex.Execute(inputString)
    For Each objMatch In objMatches
        Debug.Print "ID: " & objMatch.SubMatches(0)
        Debug.Print "Text: " & objMatch.SubMatches(1)
        Debug.Print "----------------"
    Next objMatch
End Sub

VBA之正则表达式(43)-- 从网页中提取指定数据_第3张图片


示例数据

Байтайлақ

Байтоғай

Оразәлі

你可能感兴趣的:(数据清洗,VBA,正则,正则匹配,提取网页,网页,正则,正则提取)