我需要从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 Blabla Balbal <span class="type">15.80€ </span>+1.94 % +0.30€ | HOME <SPAN class="type2">11,398.70</span> +0.65 % +74.10</div>
编辑:我不能使用Htmlagilitypack,因为我的客户不希望我们使用任何外部库。我也听说过使用XmlReader,但我不确定html的结构是否会与xml相匹配。
答案 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];
答案 2 :(得分:1)
这个正则表达式将捕获字符串:
"<span class=\"type\">(?<Content>([^<]*))</span>"
虽然,我同意其他答案,但你应该使用Path而不是Regexes来解析html。