Спарсить часть значений - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Уважаемые участники и гости форума! Помогите пожалуйста новичку разобраться в возникшей ситуации. Допустим есть сайт, его исходный код такого вида:
<tr>
<td colspan="2">CDMF-XRE2-XE7F</td>
</tr>
<tr>
<td colspan="2">AMAU-XE7F-XE7F</td>
</tr>
<tr>
<td colspan="2">CJFA-X3AK-RK7P</td>
</tr>
<tr>
<td colspan="2">CDMF-XRE2-XE7F</td>
</tr>
<tr>
<td colspan="2">AMAU-XE7F-XE7F</td>
</tr>
<tr>
<td colspan="2">CJFA-X3AK-RK7P</td>
</tr>
Собственно вопрос: как мне получить в переменную только тир первых значения вида "CJFA-X3AK-RK7P" т.е. 1) CDMF-XRE2-XE7F 2) AMAU-XE7F-XE7F 3) CJFA-X3AK-RK7P С дальнейшим выводом на лейбл? Пробовал так:
var page = VkRequest.Request("http://example.ru/").Content;
var matches = Regex.Matches(page, @"[A-Z0-9]{1,4}\-[A-Z0-9]{1,4}\-[A-Z0-9]{1,4}");
string result = "";          
foreach (Match m in matches)
result = result + m + "\r\n";
Но тут проблема в том что выводятся все шесть значений...

Решение задачи: «Спарсить часть значений»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using HtmlDocument = HtmlAgilityPack.HtmlDocument;
 
namespace ConsoleApplication2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var code = @"<tr>
<td>example</td>
<td>example</td>
</tr>
<tr>
<td>example</td>
<td>example</td>
</tr>
<tr>
<td colspan=""2""><strong>example example exampleexample example</strong></td>
</tr>
<tr>
<td colspan=""2"">HO9J-FRH5-LRBN</td>
</tr>
<tr>
<td colspan=""2"">HO9J-FRH5-LRBN</td>
</tr>
<tr>
<td colspan=""2"">HO9J-FRH5-LRBN</td>
</tr>
<tr>
<td colspan=""2"">HO9J-FRH5-LRBN</td>
</tr>
<td colspan=""2"">RRRR-FRH5-LRBN</td>
</tr>
<td colspan=""2"">RRRR-FRH5-LRBN</td>
</tr>
<td colspan=""2"">RRRR-FRH5-LRBN</td>
</tr>";
 
 
            var doc = new HtmlDocument();
            doc.LoadHtml(code);
            var form = new Form();
            form.Controls.Add(new Label
            {
                Text =
                    string.Join(Environment.NewLine,
                        doc.DocumentNode.SelectNodes("//td")
                            .Select(n => n.InnerHtml)
                            .Where(n => n.Contains("-"))
                            .TakeLast(3)),
                AutoSize = true
            });
            Application.Run(form);
        }
    }
}
 
internal static class Ex
{
    public static IEnumerable<TSource> TakeLast<TSource>(this IEnumerable<TSource> source, int count)
    {
        if (source == null) throw new ArgumentNullException(nameof(source));
        return TakeLastImpl(source, count);
    }
 
    private static IEnumerable<T> TakeLastImpl<T>(IEnumerable<T> source, int count)
    {
        Debug.Assert(source != null);
 
        if (count <= 0)
            yield break;
 
        var q = new Queue<T>(count);
 
        foreach (var item in source)
        {
            if (q.Count == count)
                q.Dequeue();
            q.Enqueue(item);
        }
 
        foreach (var item in q)
            yield return item;
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы