繁体   English   中英

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

[英].NET Regular Expressions - Shorter match

我有一个关于.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 

为什么第一场比赛是</ td>和其余的字符串而不是停在</ td>?

你的正则表达式包括

(.+)

这是一场贪婪的比赛。 贪婪的比赛, 只要他们能下一个字符(匹配之前延长<你的情况)。 尝试:

(.+?)

这是一个非贪婪的匹配,在匹配下一个字符之前尽可能地扩展。

您需要指定延迟匹配。 而不是+ ,使用+? 说尽可能少的字符应该匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM