正则表达式替换HTML的锚标记中的href值

时间:2010-09-30 16:59:20

标签: c# html regex url

我有一个字符串形式的HTML,在我在浏览器中显示它之前,我想将页面上的所有相对URL更改为绝对URL。我怎么能以最好的方式做到这一点?我正在考虑使用Regex作为获取锚标签的href属性并将基本URL附加到它的选项,但不知道如何做到这一点?有人可以帮助或建议更好的解决方案吗?

PS:我想排除链接中只有“#”符号的所有链接。例如:我想将<a href="/dir/file1.htm" />替换为<a href="http://mysite/dir/file1.htm" />,但我想排除<a href="#A1" />

我将不胜感激。

1 个答案:

答案 0 :(得分:3)

通常,使用RegEx解析HTML是一个坏主意 - 请参阅here了解原因。

您可以使用HTML Agility Pack之类的HTML解析器来从HTML中提取网址:

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
   HtmlAttribute att = link["href"];
   att.Value = FixLink(att);
}

然后,您可以排除任何以#开头的网址。