VBA之正则表达式(33)-- 网页表格提取数据

实例需求:示例数据如下所示。

<td><a href="javascript:;" data-url="/gstdHb/queryInfo" data-param="{stdId:'46826'}" data-tempid="shb-info">电力变压器</a></td>
<td class="txt-nowrap">DL/T 1539-2016</td>
<td>1</td>

从示例数据提取名称、规格和数量

电力变压器
DL/T 1539-2016
1

方法1:
Sub Demo1()
    Dim regExp As Object, regExpMHs As Object
    Set regExp = CreateObject("vbscript.regExp")
    regExp.Global = True
    regExp.MultiLine = True
    regExp.Pattern = ">([^<\r\n]+)<"
    txt = [a1]
    Set regExpMHs = regExp.Execute(txt)
    For j = 0 To regExpMHs.Count - 1
        Debug.Print regExpMHs(j).submatches(0)
    Next
    Set regExpMHs = Nothing
    Set regExp = Nothing
End Sub

代码解析:
第3行代码创建正则表达式对象。
第4行代码设置全局匹配。
第5行代码设置多行匹配。
第6行代码设置匹配规则。

正则表达式说明
[^<\r\n]+匹配一个或者多个非<\r\n字符
>()<提取组之前为右尖括号,之后为左尖括号

第7行代码将数据保存在变量中。
第8行代码执行正则匹配。
第9~11行代码输出每个提取组中的第一个子匹配结果。

匹配结果如下图所示。
在这里插入图片描述


方法2:正则替换

Sub Demo2()
    Dim regExp As Object, regExpMHs As Object
    Set regExp = CreateObject("vbscript.regExp")
    regExp.Global = True
    regExp.MultiLine = True
    regExp.Pattern = "<.*?>"
    txt = [a1]
    Debug.Print regExp.Replace(txt, "")
    Set regExpMHs = Nothing
    Set regExp = Nothing
End Sub

代码解析:
第6行代码设置匹配规则。

正则表达式说明
<.*?>尖括号内非贪婪匹配多个任意字符

第8行代码执行正则替换,并输出结果。


条条大路通罗马,有的时候正则替换比正则匹配更简洁。