使用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条信息的主要内容,如果未能解决你的问题,请参考以下文章

我尝试从同一数据库的 4 个不同表中获取信息

C# Regex:从 Web 性能和负载测试项目中的 HTTP 响应中获取随机 URL

c#如何获取数据库中某个表中的其中一个字段的多条值

如何仅使用 c# Web 浏览器加载 html

C# EF 在另一个表中查找数据的最佳方法

如何在 Java 中获取 Group.Captures(来自 C# 中的 RegEx)的行为?