此正则表达式仅返回一个匹配项。 (我想要检索所有图像源/位置(例如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"" />"
模式
pattern = @"<img.*src=""([^""]*)"".*/>";
MatchCollection计数始终为1(奇怪的是,只有最后一个匹配,在本例中为'folder / image.png'。每当我将模式更改为'img'时,它会找到所有三个图像标记。所以,它很可能我的正则表达式模式不正确。我不是正则表达式大师,非常感谢任何帮助。
答案 0 :(得分:3)
Do not parse HTML using regular expressions
相反,您应该使用HTML Agility Pack,如下所示:
var doc = new HtmlDocument();
doc.Load(path);
//Or
doc.Parse(source);
var paths = doc.DocumentElement.Descendants("img")
.Select(img => img.Attributes["src"].Value);
答案 1 :(得分:2)
尝试pattern = @"<img.*?src=""([^""]*)"".*?/>";
- 使用。*?匹配应该是非贪婪的(即在匹配与下一部分之前不要消耗他们所能做的一切)。
答案 2 :(得分:0)
正则表达式的内部过于宽松,它允许匹配一次吞下所有图像标记。
但实际上,您不应该尝试使用正则表达式来解析HTML。疯狂就是这样......
答案 3 :(得分:0)
尝试模式
pattern = @"(?<=.src="")[\w\/\.~]+";