C#Regex替换所有不包含某些href的锚标签

时间:2014-05-11 11:13:50

标签: c# regex

我正在尝试替换html字符串中的所有锚链接,不包括某些href模式。 对于这个例子假设我想删除所有不具有www.a.com的href的锚点(这意味着所有锚点标记都不会被删除)。

考虑我想要实现的下一个html和输出

string html = "some text <a href=\"http://www.a.com\">Link1</a> some longer text <a href=\"http://www.b.com\">Link2</a> text";
string result = Regex.Replace(html, ??, ??, RegexOptions.IgnoreCase);
string expectedOutput = "some text <a href=\"http://www.a.com\">Link1</a> some longer text Link2 text"

在这种情况下请注意我想保留锚点“Link2”的文字

我试图通过Regex实现这一目标,但是无法管理以使其正常工作。

你能告诉我我应该使用什么样的正则表达式吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

    Regex r = new Regex("(<a [ a-zA-Z0-9]?href=\"http://www.[a-zA-Z0-9]+.com\"[ a-zA-Z0-9]?>+)([a-zA-Z0-9]+)</a>");

    Match mh = r.Match(html);

    Dictionary<string, string> lst = new Dictionary<string,string>();
    while(mh.Success)
     {
      lst.Add(mh.Value, mh.Groups[2].Value);
      mh = mh.NextMatch();
     }

    foreach(var l in lst.Keys)
     {
      if(!l.Contains("http://www.a.com"))
       {
        html = html.Replace(l,lst[l]);
       }                
     }

演示here

请注意,此特定解决方案确实符合您的预期输出,但正如评论中指出的那样,最好使用HTML解析器。