市场数据的正则表达式

时间:2019-03-05 16:05:11

标签: c# regex match

我正在尝试从市场网络中获取一些数据。 检查该网站后,我找到了我感兴趣的部分:

"<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 :(得分:0)

您的正则表达式看起来不错,您只需要对匹配结果进行分组即可。尝试以下代码:

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);

您会得到

  

19年4月3日2814.37 2816.88 2767.66 2792.81
  19/03/1 2798.22 2808.02 2787.38 2803.69