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来完成这一点,但无法使其工作。
你能告诉我应该用什么正则表达式吗?
试试这个:
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解析器会更好。