正则表达式Matchcollection组

时间:2015-09-28 14:07:07

标签: c# regex

我已经尝试了两天来解决问题,我有一个MatchCollection。在模式中是一个组,我希望有一个列表与集团的解决方案(有两个或更多的解决方案)。

string input = "<tr><td>Mi, 09.09.15</td><td>1</td><td>PK</td><td>E</td><td>123</td><td></td></tr><tr><td>Mi, 09.09.15</td><td>2</td><td>ER</td><td>ER</td><td>234</td><td></td></tr>";
string Patter2 = "^<tr>$?<td>$?[D-M][i-r],[' '][0-3][1-9].[0-1][1-9].[0-9][0-9]$?</td>$?<td>$?([1-9][0-2]?)$?</td>$?";
Regex r2 = new Regex(Patter2);
MatchCollection mc2 = r2.Matches(input);

foreach (Match match in mc2)
{
     GroupCollection groups = match.Groups;
     string s = groups[1].Value;
     Datum2.Text = s;
}

但只有最后一个匹配(2)出现在TextBox“Datum2”中。 我知道我必须使用例如列表框,但组[1] .Value是一个字符串......

感谢您的帮助和时间。 迪特

1 个答案:

答案 0 :(得分:0)

您需要在代码中更正的第一件事是Datum2.Text = s;会覆盖Datum2中的文字,如果它不止一个匹配。

现在,关于你的正则表达式,

  • ^在线的乞讨处强制匹配,所以实际上只有一场比赛。如果删除它,它将匹配两次。
  • 我似乎无法理解整个模式中$?的目的是什么(只是将它们取出)。
  • [' ']匹配&#34;引号,空格或引号(不需要在字符类中重复字符。
  • [0-3][1-9].[0-1][1-9].[0-9][0-9]中的所有点都需要转义。否则,点会匹配任何字符。
  • [0-1][1-9]匹配除&#34; 10&#34;之外的所有月份。第二个字符应为[0-9](或\d)。

代码:

string input = "<tr><td>Mi, 09.09.15</td><td>1</td><td>PK</td><td>E</td><td>123</td><td></td></tr><tr><td>Mi, 09.09.15</td><td>2</td><td>ER</td><td>ER</td><td>234</td><td></td></tr>";
string Patter2 = "<tr><td>[D-M][i-r],[' ][0-3][0-9]\\.[0-1][0-9]\\.[0-9][0-9]</td><td>([1-9][0-2]?)</td>";
Regex r2 = new Regex(Patter2);
MatchCollection mc2 = r2.Matches(input);
string s= "";

foreach (Match match in mc2)
{
     GroupCollection groups = match.Groups;
     s = s + " " + groups[1].Value;
}

Datum2.Text = s;

<强>输出:

1 2

DEMO

您应该知道正则表达式不是解析HTML的工具。它适用于简单的案例,但对于实际案例,请考虑使用HTML Agility Pack