我正在尝试对分配给Web搜索的HTML内容的字符串执行正则表达式搜索。我想要匹配的模式具有以下格式HQ 12345
第二个片段也可以以字母开头,因此HQ A12345
也是可能的。如下面的代码所示,我使用的正则表达式模式是"HQ .*[0-9]"
。
问题是,当我运行正则表达式搜索时,匹配的模式不仅仅是HQ 959693
,还包括其余的html文件内容,如下面消息框的快照所示。
Sub Test()
Dim mystring As String
mystring = getHTMLData("loratadine")
Dim rx As New RegExp
rx.IgnoreCase = True
rx.MultiLine = False
rx.Global = True
rx.Pattern = "HQ .*[0-9]"
Dim mtch As Variant
For Each mtch In rx.Execute(mystring)
Debug.Print mtch
MsgBox(mtch)
Next
End Sub
Public Function getHTMLData (ByVal name As String) As String
Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
XMLhttp.setTimeouts 2000, 2000, 2000, 2000
XMLhttp.Open "GET", "http://rulings.cbp.gov/results.asp?qu=" & name & "&p=1", False
XMLhttp.send
If XMLhttp.Status = 200 Then
getHTMLData = XMLhttp.responsetext
Else
getHTMLData = ""
End If
End Function
答案 0 :(得分:2)
使用?
指定非贪婪,否则匹配将消耗直到整个字符串的最后一位数。此外,您只匹配一个数字出现。添加+
以指定“一个或多个”,以便符合您的目标:
HQ .*?[0-9]+
或者,你可以尝试使用这样的否定字符类:
HQ [^0-9]*[0-9]+
或者你甚至可以进一步简化它:
HQ [^\d]*\d+
答案 1 :(得分:1)
默认情况下,正则表达式匹配是贪婪的。不幸的是,我无法准确地重现你的问题,但我很确定这是因为你是一个长字符串,最后用'。*'与一个数字匹配。
我发现此链接很有用,请参阅底部附近关于*
贪婪的解释http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm
我建议您将正则表达式更改为:
HQ .*?[0-9]+
这将匹配“HQ”和任意数量的字符,后跟任意数量的数字字符。由于“?”,它还会消耗“。*”中的最小量。
如果这不起作用,请回复,我将在Excel中运行正则表达式。