【发布时间】:2018-12-24 11:58:13
【问题描述】:
我在vba 中结合regular expressions 编写了一个脚本来解析网页中的company name、phone 和fax。当我运行我的脚本时,我完美地获得了这些信息。然而,问题是我使用了三个不同的expressions,为了让它们成功运行,我创建了三个不同的regex objects,如rxp、rxp1 和rxp2。
我的问题:我如何创建一个regex object,在其中我可以使用三个patterns,这与我在下面所做的不同?
这是脚本(正在运行的):
Sub GetInfo()
Const Url$ = "https://www.austrade.gov.au/SupplierDetails.aspx?ORGID=ORG0120000508&folderid=1736"
Dim rxp As New RegExp, rxp1 As New RegExp, rxp2 As New RegExp
With New XMLHTTP60
.Open "GET", Url, False
.send
rxp.Pattern = "Company Name:(\s[\w\s]+)"
rxp1.Pattern = "Phone:(\s\+[\d\s]+)"
rxp2.Pattern = "Fax:(\s\+[\d\s]+)"
If rxp.Execute(.responseText).Count > 0 Then
[A1] = rxp.Execute(.responseText).Item(0).SubMatches(0)
End If
If rxp1.Execute(.responseText).Count > 0 Then
[B1] = rxp1.Execute(.responseText).Item(0).SubMatches(0)
End If
If rxp2.Execute(.responseText).Count > 0 Then
[C1] = rxp2.Execute(.responseText).Item(0).SubMatches(0)
End If
End With
End Sub
引用添加到库中执行上述脚本:
Microsoft XML, v6.0
Microsoft VBScript Regular Expressions
【问题讨论】:
-
提供一些样本数据会让你得到更好的答案。没有看到布局,我们只是猜测如何组合模式。
-
脚本@emsimpson92 中已经提供了一个链接。
-
您是否尝试过 OR regex sytax 组合成一个模式字符串?公司名称:(\s[\w\s]+)|电话:(\s\+[\d\s]+)|传真:(\s\+[\d\s]+) 作为您的模式?
-
感谢您的评论@QHarr。我知道如何将它们组合成一个模式。用例会是什么?再一次,模式不是这里的关注点。我如何使用它们在单个正则表达式对象中获得三个不同的结果是我的问题。谢谢。
-
它们将位于单个正则表达式对象中。
标签: regex vba excel web-scraping