Спарсить часть значений - C#
Формулировка задачи:
Доброго времени суток!
Уважаемые участники и гости форума! Помогите пожалуйста новичку разобраться в возникшей ситуации.
Допустим есть сайт, его исходный код такого вида:
Собственно вопрос: как мне получить в переменную только тир первых значения вида "CJFA-X3AK-RK7P" т.е.
1) CDMF-XRE2-XE7F
2) AMAU-XE7F-XE7F
3) CJFA-X3AK-RK7P
С дальнейшим выводом на лейбл?
Пробовал так:
Но тут проблема в том что выводятся все шесть значений...
<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>
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;
}
}