Skip to main content
 首页 » 编程设计

c#之.NET 正则表达式之较短的匹配

2024年02月24日40傻小

我对 .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 

为什么第一个匹配的是 和字符串的其余部分而不是在 处停止?

请您参考如下方法:

你的正则表达式包括

(.+) 

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

(.+?) 

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