我正在尝试使用VB.net提取可能与HTML内部不同的十进制值。
作为一种测试,这是我正在使用的代码:
Dim result As String = "<td class='fl'><label>Balance:</label></td><td nowrap class='fd'><span>$999,999.99</span></td></tr></table></td>"
Dim RegexResult = Regex.Match(result, "^(\$|)([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$")
Console.WriteLine(RegexResult)
仅供参考,我在这里找到了表达方式:
在此示例中,提取的结果应为:$999999.99
。然后将对其进行修改以剥离美元符号。
在Visual Studio控制台中查看时,正则表达式结果为{}
。如何修改表达式以考虑<span>
标记?
答案 0 :(得分:0)
即使您的正则表达式现在可以使用,也不要使用正则表达式来解析动态HTML内容。
使用可用的HTML解析器,如HtmlAgilityPack
,这是一个更可靠的解决方案:
Dim html = "<td class='fl'><label>Balance:</label></td><td nowrap class='fd'><span>$999,999.99</span></td></tr></table></td>"
Dim doc As New HtmlAgilityPack.HtmlDocument()
doc.LoadHtml(html)
Dim td = doc.DocumentNode.SelectSingleNode("//*[contains(@class,'fd')]")
Dim spanText = td.Descendants("span").First().InnerText
Dim balance As Decimal
Dim usCulture = New CultureInfo("en-us")
Dim valid = Decimal.TryParse(spanText, NumberStyles.Currency, usCulture, balance)