.net 仅返回一个匹配项的正则表达式

.net 仅返回一个匹配项的正则表达式,.net,regex,.net,Regex,此正则表达式仅返回一个匹配项。(我希望检索所有图像源/位置(例如img html标记的src属性中包含的“folder/image.png”) 示例输入字符串: input = @"<p>here is an image</p><img attr=""ahwer"" src=""~/Images/logo.png"" st=""abc""/><p>some more text here</p>"; s += @"

此正则表达式仅返回一个匹配项。(我希望检索所有图像源/位置(例如img html标记的src属性中包含的“folder/image.png”)

示例输入字符串:

input = @"<p>here is an image</p><img attr=""ahwer"" src=""~/Images/logo.png"" st=""abc""/><p>some more text here</p>";
            s += @"<p>test</p><img src=""a.jpg"" /><img src=""folder/image.png"" />"
input=@“这里有一个图像

这里还有一些文本

”; s+=@“测试
图案

pattern = @"<img.*src=""([^""]*)"".*/>";
pattern=@;
MatchCollection计数始终为1(奇怪的是,只有最后一个匹配,在本例中为“folder/image.png”。每当我将模式更改为简单的“img”时,它会找到所有三个图像标记。因此,我的正则表达式模式可能不正确。我不是正则表达式专家,希望得到任何帮助。

相反,您应该使用,如下所示:

var doc = new HtmlDocument();
doc.Load(path);  
//Or 
doc.Parse(source);

var paths = doc.DocumentElement.Descendants("img")
                               .Select(img => img.Attributes["src"].Value);

尝试
pattern=@”“;
-使用。*?匹配应该是非贪婪的(即,在匹配与下一部分匹配之前,不要消耗所有可以消耗的资源)。

正则表达式的内部过于宽松,允许匹配一次吞下所有图像标记

但实际上,你不应该尝试使用正则表达式来解析HTML。疯狂就在于这样…

试试这个模式

pattern = @"(?<=.src="")[\w\/\.~]+";

pattern=@”(?检查以确保有适当数量的双引号。我不熟悉.NET的特殊风格的正则表达式,但看起来在目标和模式中都有太多的双引号。@MikeD:引号没问题。这就是如何在C#的逐字字符串文本中转义引号的方法:将它们加倍。就是这样。获得所有三个匹配项否w、 我在你发布之前几秒钟就想到了这一点。谢谢!谢谢你的链接。但是,我不会做主要的HTML操作,所以我不想使用第三方库。