使用c#中的正则表达式检索数据
本文关键字:检索 数据 正则表达式 使用 | 更新日期: 2023-09-27 17:54:51
数据:
<tr>
<td>
<a href="somelink">
some. .data...
</a>
</td>
<td>Black</td>
<td>57234</td>
<td>5431.60</td>
<td><font class="down"> -125.02</font></td>
</tr><tr>
<td>
<a href="somelink">
some. .data...
</a>
</td>
<td>Blue</td>
<td>57234</td>
<td>5431.60</td>
<td><font class="up"> -125.02</font></td>
</tr><tr>
<td>
<a href="somelink">
some. .data...
</a>
</td>
<td>Brown</td>
<td>57234</td>
<td>5431.60</td>
<td><font class="down"> -125.02</font></td>
</tr>
...more data...
我想提取一些。数据…';'黑色';'57234';'5431.60’;一次。[不需要第五个td
数据。]
最初,
<tr><td><a.*>([a-zA-Z0-9 -]+)</a></td><td>('w+)</td><td>(['d]+'.'d+)</td><td>('d+'.'d+)</td>
正在工作。(通过命中和未命中进近(
但是,现在它坏了。
现在,当我使用<td>(.*)</td>
或<'w+>(.*)</'w+>
时:它在每个tr中显示最后四个td
的数据。但是,为什么它不显示<a href...>...</a>
?我如何获得我想要的数据?
Regex通常是解析HTML的糟糕方法。
我建议看一下HTML敏捷包或CsQuery,它们是专门为.NET.构建的HTML解析器
HTML敏捷包可以使用XPath和LINQ进行查询,CsQuery使用jQuery选择器。
如果您使用真正的html解析器,您的代码将更简单、更容易维护
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var table = doc.DocumentNode.Descendants("tr")
.Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList())
.ToList();
给定您提供的示例html,上面的代码将返回3行,每行包含5列。