从html中提取所有图片网址,除了那些已注释掉的网址

时间:2012-02-24 18:00:56

标签: c# html regex

我正在使用此正则表达式将所有图片网址都放在html文件中:

(?<=img\s*\S*src\=[\x27\x22])(?<Url>[^\x27\x22]*)(?=[\x27\x22])

有没有办法修改这个正则表达式,以排除任何用html注释“”注释掉的img标签?

2 个答案:

答案 0 :(得分:2)

如果您的正则表达式已经用于提取图像(这本身就是一个奇迹),请考虑使用正则表达式来删除HTML注释,如下所示:

<!--.*?-->

将其替换为空字符串,注释中的所有图片将不再显示在您的其他正则表达式中。

或者,如果您使用的是PHP(您没有标记编程语言),则可以使用strip_tags function"<img>"作为“允许的标记”参数。这将删除HTML注释以及可能干扰正则表达式的其他标记。

答案 1 :(得分:0)

使用HTML敏捷包时,实际上也非常简单,其中有一些设置可以帮助修复错误的HTML(如果需要)。像:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.OptionAutoCloseOnEnd = true;
doc.OptionCheckSyntax = false;
doc.OptionFixNestedTags = true;
// etc, just set them before calling Load or LoadHtml

http://htmlagilitypack.codeplex.com/

string textToExtractSrcFrom = "... your text here ...";

doc.LoadHtml(textToExtractSrcFrom);

var nodes = doc.DocumentNode.SelectNodes("//img[@src]") ?? new HtmlNodeCollection();
foreach (var node in nodes)
{
    string src = node.Attributes["src"].Value;
}

//or 
var links = nodes.Select(node => node.Attributes["src"].Value);