Регулярное выражение на рыночных данных - PullRequest
3 голосов
/ 05 марта 2019

Я пытаюсь получить некоторые данные из рыночной сети.После проверки этой сети я нашел интересующую меня часть:

"<td>03/04/19</td> <td>2814.37</td> <td>2816.88</td> <td>2767.66</td> <td>2792.81</td> </tr> <tr> <td>03/01/19</td> <td>2798.22</td> <td>2808.02</td> <td>2787.38</td> <td>2803.69</td>"

Я сделал этот код для сбора данных:

MatchCollection m1 = Regex.Matches(html, @"<td>(.+?)</td>", RegexOptions.Singleline);

Я получил его, НО.... все данные в строке !!!

Я хочу получить что-то вроде этого:

03/04/19 2814.37 2816.88 2767.66 2792.81
03/01/19 2798.22 2808.02 2787.38 2803.69
… and so on…

Как я могу получить это?

Заранее спасибо..

1 Ответ

0 голосов
/ 05 марта 2019

Вы regex выглядит хорошо, вам просто нужно сгруппировать соответствующий результат. Попробуйте этот код:

var input = "<td>03/04/19</td> <td>2814.37</td> <td>2816.88</td> <td>2767.66</td> <td>2792.81</td> </tr> <tr> <td>03/01/19</td> <td>2798.22</td> <td>2808.02</td> <td>2787.38</td> <td>2803.69</td>";
var result = Regex.Matches(input, "<td>(.+?)</td>")
    .Cast<Match>() // to enable Linq
    .Select((m, i) => new {m, part = i / 5}) // here "5" is size of a group
    .GroupBy(x => x.part, x => x.m)
    .Select(x => string.Join(" ", x.Select(m => m.Groups[1].Value))) // create a single line from five matches
    .ToArray();

Теперь, если вы выводите результат на консоль

foreach (var line in result)
    Console.WriteLine(line);

Вы получите

03/04/19 2814,37 2816,88 2767,66 2792,81
01.03.192798,22 2808,02 2787,38 2803,69

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...