我已经尝试了两天来解决问题,我有一个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是一个字符串......
感谢您的帮助和时间。 迪特
答案 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
您应该知道正则表达式不是解析HTML的工具。它适用于简单的案例,但对于实际案例,请考虑使用HTML Agility Pack