【问题标题】:Regex VBA Match正则表达式 VBA 匹配
【发布时间】:2013-03-28 17:28:06
【问题描述】:
如何在第二个 msgbox 中获得值 81.16?
Regex get only numeric values from string
Sub Tests()
Const strTest As String = "<td align=""right"">116.83<span class=""up2""></span><br>81.16<span class=""dn2""></span></td>"
RE6 strTest
End Sub
Function RE6(strData As String) As String
Dim RE As Object, REMatches As Object
Set RE = CreateObject("vbscript.regexp")
With RE
' .MultiLine = True
'.Global = False
.Pattern = "\b[\d.]+\b"
End With
Set REMatches = RE.Execute(strData)
MsgBox REMatches(0)
MsgBox REMatches(1) 'getting error here
End Function
【问题讨论】:
标签:
html
regex
vba
excel
xml-parsing
【解决方案1】:
首先,尽量不要使用RegEx来解析任何类型的xml。尝试使用 xml 解析器或XPath
XPath,XML 路径语言,是一种用于选择节点的查询语言
来自 XML 文档。此外,XPath 可用于计算值
(例如,字符串、数字或布尔值)来自 XML 的内容
文件。
为解决您的问题而改变
'.Global = False 'Matches only first occurrence
进入
.Global = True 'Matches all occurrences
如何在 VBA 中正确解析 XML:
请注意,我必须关闭您的 <br /> 标记才能生效。
Private Sub XmlTestSub()
On Error GoTo ErrorHandler
Dim xml As MSXML2.DOMDocument60
Dim nodes As MSXML2.IXMLDOMNodeList
Dim node As MSXML2.IXMLDOMNode
yourXmlString = "<td align=""right"">116.83<span class=""up2""></span><br />81.16<span class=""dn2""></span></td>"
Set xml = New MSXML2.DOMDocument60
If (Not xml.LoadXML(yourXmlString)) Then
Err.Raise xml.parseError.ErrorCode, "XmlTestSub", xml.parseError.reason
End If
Set nodes = xml.SelectNodes("/td/text()") 'XPath Query
For Each node In nodes
Debug.Print node.NodeValue
Next node
Done:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " " & Err.Description, vbCritical
Resume Done
End Sub