如何使用正则表达式从span标记中检索html字符串中的数据?

时间:2015-05-14 16:54:05

标签: c# html regex xml-parsing

我需要从html doc中检索一些信息,因为获取json或xml的Web服务仍然没有准备好。我正在使用c#并使用正则表达式从html字符串中获取所需的数据。我已经设法从整个html字符串中获取了我想要使用的div,但现在我无法获得第一个span标记之间的信息。 我试图在两者之间检索数据;和第一个结束的span标签,但我真正想要的是第一个span标签之间的内容。

这是我到目前为止所写的正则表达式,但它不起作用:

".*;(?<Content>(\r|\n|.)*)</span>"

我也试过这个,但也没有工作:

"<span class=""type"">(?<Content>(\r|\n|.)*)</span>"

以下是我要从中检索数据的div:

<div class="main">ABASASDFÓ 18/06/2014 17:38h&nbsp; Blabla Balbal&nbsp; <span class="type">15.80&#8364;&nbsp; </span>+1.94 % +0.30&#8364; &nbsp;|&nbsp;HOME <SPAN class="type2">11,398.70</span>&nbsp; +0.65 % +74.10</div>

编辑:我不能使用Htmlagilitypack,因为我的客户不希望我们使用任何外部库。我也听说过使用XmlReader,但我不确定html的结构是否会与xml相匹配。

3 个答案:

答案 0 :(得分:1)

您想要使用XPath。像这样:

div/span/text()

我理解您的解决方案中不需要一些外部第三方库,解决方法是获取整个库的源代码:
https://htmlagilitypack.codeplex.com/
现在你没有外部库,你有一个内部库,你可以使用正确的工具来完成工作!

XmlReader是一个相当低级别的工具,它可以在技术上为您完成工作但是您之后更多的是&#34;使用XmlReader来执行XPath&#34;这里讨论的是:https://msdn.microsoft.com/en-us/library/ms950778.aspx

XPathReader类是所有这些的结果,已被LINQ to XML取代:https://msdn.microsoft.com/en-ca/library/bb387098.aspx

这里的另一个选择是尝试使用一些LINQ来处理你的HTML文件,但这可能很棘手,因为HTML并不是一个好的XML。如果你正在寻找那些,那么它仍然是另一种选择。

答案 1 :(得分:1)

以下是使用Javascript中的正则表达式完成的方法。你应该能够很容易地为C#调整它。

var inner = html.match( /<span class="type"(?:\s+[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)))*\s*>([\S\s]*)<\/span>/i)[1];

小提琴:http://jsfiddle.net/GarryPas/uk32r8vz/

答案 2 :(得分:1)

这个正则表达式将捕获字符串:

"<span class=\"type\">(?<Content>([^<]*))</span>"

虽然,我同意其他答案,但你应该使用Path而不是Regexes来解析html。