如何使用 Html Agility Pack + c# 将文本中的 url 转换为 html 链接?
例如:“www.stackoverflow.com 是一个非常酷的网站。”
输出:
"<a href="www.stackoverflow.com">www.stackoverflow.com</a> is a very cool site."
如何使用 Html Agility Pack + c# 将文本中的 url 转换为 html 链接?
例如:“www.stackoverflow.com 是一个非常酷的网站。”
输出:
"<a href="www.stackoverflow.com">www.stackoverflow.com</a> is a very cool site."
感谢@user1778606 的回答。尽管它仍然使用了一些正则表达式,但我得到了这个工作。它工作得更好更安全(即它永远不会在超链接和 href 属性中创建超链接)。
//convert text to html
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(inputString);
// \w* - means it can start with any alphanumeric charactar
// \s+ - was placed to replace all white spaces (when there is more than one word).
// \b - set bounderies for the keyword
const string pattern = @"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)";
//get all elements text propery except for anchor element
var nodes = doc.DocumentNode.SelectNodes("//text()[not(ancestor::a)]") ?? new HtmlAgilityPack.HtmlNodeCollection(null);
foreach (var node in nodes)
{
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
node.InnerHtml = regex.Replace(node.InnerHtml, "<a href=\"$1\">$1</a>").Replace("href=\"www", "href=\"http://www");
}
return doc.DocumentNode.OuterHtml;
我很确定它是可能的,虽然我没有尝试过。
以下是如何用链接替换文档中的固定字符串
继承人如何正则表达式的网址
把它们放在一起,它应该是可能的。
伪代码
选择所有文本节点
对于每个节点
为找到的每个 url 获取内部文本
在文本中查找 url(使用正则表达式?)用字符串文字链接标记替换 url 的文本(a href = etc ...)