使用Regex从C#中的一个表中获取3条信息
Posted
技术标签:
【中文标题】使用Regex从C#中的一个表中获取3条信息【英文标题】:Use Regex to obtain 3 pieces of information from a table in C# 【发布时间】:2020-11-13 04:16:21 【问题描述】:我是正则表达式的新手。我设法到达某个地方,但我无法合并 3 条记录。
这是我作为字符串下载的示例 html:
<table>
<thead>
<tr>
<th>Валута</th>
<th>Код</th>
<th>За единица валута</th>
<th>Фиксинг на БНБ</th>
<th>Курс купува</th>
<th>Курс продава</th>
</tr>
</thead>
<tbody>
<tr>
<td>Австралийски долар</td>
<td style="text-align: center;">AUD</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">1.21074</td>
<td style="text-align: center;">1.18700</td>
<td style="text-align: center;">1.23320</td>
</tr>
<tr>
<td>Канадски долар</td>
<td style="text-align: center;">CAD</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">1.27010</td>
<td style="text-align: center;">1.23650</td>
<td style="text-align: center;">1.28450</td>
</tr>
<tr>
<td>Швейцарски франк</td>
<td style="text-align: center;">CHF</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">1.82107</td>
<td style="text-align: center;">1.78300</td>
<td style="text-align: center;">1.85290</td>
</tr>
<tr>
<td>Китайски юан</td>
<td style="text-align: center;">CNY</td>
<td style="text-align: center;">10</td>
<td style="text-align: center;">2.44534</td>
<td style="text-align: center;">2.31970</td>
<td style="text-align: center;">2.54220</td>
</tr>
<tr>
<td>Датска крона</td>
<td style="text-align: center;">DKK</td>
<td style="text-align: center;">10</td>
<td style="text-align: center;">2.62707</td>
<td style="text-align: center;">2.57830</td>
<td style="text-align: center;">2.67830</td>
</tr>
<tr>
<td>Евро</td>
<td style="text-align: center;">EUR</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">1.95583</td>
<td style="text-align: center;">1.94900</td>
<td style="text-align: center;">1.95850</td>
</tr>
<tr>
<td>Британска лира</td>
<td style="text-align: center;">GBP</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">2.17182</td>
<td style="text-align: center;">2.11490</td>
<td style="text-align: center;">2.19700</td>
</tr>
<tr>
<td>Японска йена</td>
<td style="text-align: center;">JPY</td>
<td style="text-align: center;">100</td>
<td style="text-align: center;">1.59399</td>
<td style="text-align: center;">1.55580</td>
<td style="text-align: center;">1.61620</td>
</tr>
<tr>
<td>Норвежка крона</td>
<td style="text-align: center;">NOK</td>
<td style="text-align: center;">10</td>
<td style="text-align: center;">1.86388</td>
<td style="text-align: center;">1.82700</td>
<td style="text-align: center;">1.89900</td>
</tr>
<tr>
<td>Нова румънска лея</td>
<td style="text-align: center;">RON</td>
<td style="text-align: center;">10</td>
<td style="text-align: center;">4.04164</td>
<td style="text-align: center;">3.85620</td>
<td style="text-align: center;">4.22380</td>
</tr>
<tr>
<td>Руска рубла</td>
<td style="text-align: center;">RUB</td>
<td style="text-align: center;">100</td>
<td style="text-align: center;">2.41212</td>
<td style="text-align: center;">2.25600</td>
<td style="text-align: center;">2.54400</td>
</tr>
<tr>
<td>Шведска крона</td>
<td style="text-align: center;">SEK</td>
<td style="text-align: center;">10</td>
<td style="text-align: center;">1.91018</td>
<td style="text-align: center;">1.87410</td>
<td style="text-align: center;">1.94790</td>
</tr>
<tr>
<td>Щатски долар</td>
<td style="text-align: center;">USD</td>
<td style="text-align: center;">1</td>
<td style="text-align: center;">1.70919</td>
<td style="text-align: center;">1.67080</td>
<td style="text-align: center;">1.71890</td>
</tr>
</tbody>
</table>
我想从每个 tr 中获取第二个 td 中的值,从每个 tr 中获取第三个值,从每个 tr 中获取最后一个值。
到目前为止,在玩了几个小时后,我得到了这个:
>\b[^>]*>(.*?)
这仅匹配 td 中的信息以及 ">" 以及结束 td 标记。它也得到了所有这些。
【问题讨论】:
HTML 不是正则,因此不建议使用 Regex(正则表达式),您应该使用 HTML 库来解析数据。 我将此 html 作为字符串下载。我需要为每个网站编写代码。大多数货币数据网站使用与 tr 和 td 类似的数据。 这只是意味着您正在阅读一个易于使用图书馆阅读的表格。 有没有可以推荐的库? 见下文:c-sharpcorner.com/UploadFile/9b86d4/… 【参考方案1】:添加包HtmlAgilityPack。
打开命名空间
using HtmlAgilityPack;
试试这个代码
var html = File.ReadAllText("test.txt");
var doc = new HtmlDocument();
doc.LoadHtml(html);
var trs = doc.DocumentNode.SelectNodes("//table/tbody/tr");
foreach (var tr in trs)
var tds = tr.SelectNodes("./td");
var code = tds[1].InnerText;
var quantity = tds[2].InnerText;
var sale = tds[5].InnerText;
Console.WriteLine($"code quantity,3 sale");
【讨论】:
以上是关于使用Regex从C#中的一个表中获取3条信息的主要内容,如果未能解决你的问题,请参考以下文章