【问题标题】:Need to replace href of anchor tags in a string需要替换字符串中锚标签的href
【发布时间】:2018-05-18 13:26:57
【问题描述】:
string content=" 
        <br /><br /><a href="need to replace this url">Cooking School</a><br /><br /><a href="http://www.sdlm.com">Feed your senses</a><br /><br /><a href="http://www.sdl.com">Take your cooking skills to the next level. Find a cooking school near you!</a><br /><br /><a href="http:google.com"><img src="http://www.sdlm1.com/autd3umrl_u_t.jpg" /></a>
     "

我需要用不同的 url 替换所有锚标签的 href 值 我使用了以下功能,但出现错误

 public List<string> GetLinksFromHtml(string content)
        {
            string regex = @"<(?<Tag_Name>(a)|img)\b[^>]*?\b(?<URL_Type>(?(1)href|src))\s*=\s*(?:""(?<URL>(?:\\""|[^""])*)""|'(?<URL>(?:\\'|[^'])*)'))";
            var matches = Regex.Matches(content, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var links = new List<string>();

            foreach (Match item in matches)
            {
                string link = item.Groups[1].Value;
                links.Add(link);
            }

            return links;
        }

感谢您的帮助

【问题讨论】:

  • 我只想获取所有锚标签href值,以便可以用我想要的其他网址替换它们。当我在堆栈溢出中搜索时,我得到了上面的函数,我刚刚尝试过,但错误是 --> parsing "(a)|img)\b[^>]*?\b(?( ?(1)href|src))\s*=\s*(?:"(?(?:\\"|[^"])*)"|'(?(?: \\'|[^'])*)'))" - ) 太多。

标签: c# regex


【解决方案1】:

尝试使用正则表达式解析 html 不是一个好主意。见this post。使用真正的 html 解析器,例如 HtmlAgilityPack

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);
foreach (var a in doc.DocumentNode.Descendants("a"))
{
    a.Attributes["href"].Value = "http://a.com?url=" + HttpUtility.UrlEncode(a.Attributes["href"].Value);
}

var newContent = doc.DocumentNode.OuterHtml;

【讨论】:

  • 我没有得到 HtmlAgilityPack dll
  • @user1622436 是什么意思? “你不能”或“你不想要”
  • 什么这么难?转到答案中的链接。点击下载并解压文件:)
  • 是的,我已经做到了。但在每个文件夹中都有一个 dll。所以我需要使用哪个 dll 请告诉我
  • @user1622436 Foldernames 表示 .net 版本(silverlight 的 sl)。选择适合你的。
猜你喜欢
  • 2018-06-19
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多