【问题标题】:Regex Matchcollection groups正则表达式匹配集合组
【发布时间】:2015-09-28 14:07:07
【问题描述】:

我已经尝试了两天来解决问题,我有一个 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) 出现在文本框“Datum2”中。 我知道我必须使用例如一个列表框,但 Groups[1].Value 是一个字符串...

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

【问题讨论】:

  • 您将 Datum2 文本字段替换为 s。它没有向 Datum2.Text 附加任何内容。如果您想查看所有匹配项,可以说 Datum2.Text = s + Datum2.Text
  • 但是 Datum2 是一个空文本框。
  • 只有第一个匹配项。
  • 您是否考虑过使用正则表达式以外的其他工具来解析 HTML 字符串中的数据?您听说过 HtmlAgilityPack 吗?
  • 匹配集合周围有循环。如果要在文本框中打印所有匹配项,请转换 match collection to string array 或使用 Datum2.Text = s + Datum2.Text

标签: c# regex


【解决方案1】:

您需要在代码中更正的第一件事是Datum2.Text = s; 将覆盖Datum2 中的文本,如果它有多个匹配项。

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

  • ^ 在行首强制匹配,所以实际上只有 1 匹配。如果删除它,它将匹配两次。
  • 我似乎无法理解整个模式中 $? 的用意(只需将它们取出)。
  • [' '] 匹配“引号、空格或引号(无需在字符类中重复字符。
  • [0-3][1-9].[0-1][1-9].[0-9][0-9] 中的所有点都需要转义。点匹配其他任何字符。
  • [0-1][1-9] 匹配除“10”之外的所有月份。第二个字符应该是[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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多