c# Regex替换所有锚标记,不包括某些href

本文关键字:不包括 href 替换 Regex | 更新日期: 2023-09-27 18:02:57

我试图替换html字符串内的所有锚链接,不包括某些href模式。对于这个例子,假设我想删除所有的锚谁有href这不是www.a.com(这意味着所有锚标签www.a.com/…(不会被删除)。

考虑下一个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来完成这一点,但无法使其工作。

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

c# Regex替换所有锚标记,不包括某些href

试试这个:

    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]);
       }                
     }

演示。

请注意,这个特定的解决方案确实符合您期望的输出,但正如在评论中指出的那样,使用HTML解析器会更好。