.NET正则表达式 - 更短的匹配

时间:2010-05-28 03:25:33

标签: c# .net regex

我有一个关于.NET正则表达式以及它如何定义匹配的问题。 我在写:

var regex = new Regex("<tr><td>1</td><td>(.+)</td><td>(.+)</td>");
if (regex.IsMatch(str))
{
    var groups = regex.Match(str).Groups;
    var matches = new List<string>();
    for (int i = 1; i < groups.Count; i++)
        matches.Add(groups[i].Value);

    return matches;
}

我想要的是获取以下两个标签的内容。而是返回:

[0]: Cell 1</td><td>Cell 2</td>...
[1]: Last row of the table

为什么第一场比赛是&lt; / td&gt;和其余的字符串而不是停在&lt; / td&gt;?

2 个答案:

答案 0 :(得分:3)

您的正则表达式包括

(.+)

这是贪心匹配。在匹配下一个字符(<的情况下)之前,贪婪匹配会尽可能扩展。尝试:

(.+?)

这是非贪婪的匹配,在匹配下一个字符之前,该匹配尽可能 little

答案 1 :(得分:1)

您需要指定延迟匹配。使用+代替+?代替尽可能少的字符匹配。