我正在使用此正则表达式将所有图片网址都放在html文件中:
(?<=img\s*\S*src\=[\x27\x22])(?<Url>[^\x27\x22]*)(?=[\x27\x22])
有没有办法修改这个正则表达式,以排除任何用html注释“”注释掉的img标签?
答案 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);