C# 中可以使用正则表达式轻松过滤 HTML 标签,同时保留指定标签。以下是实现这个功能的完整攻略:
正则匹配 HTML 标签
首先需要建立一个正则表达式,来捕获 HTML 标签。
Regex regex = new Regex("<.*?>", RegexOptions.Compiled | RegexOptions.Multiline);
这里使用了 .*?
匹配任意字符任意次,这会匹配到最近的一个大于号和最近的一个小于号之间的所有内容,也就是一个 HTML 标签。
同时为了让正则表达式更快捷高效,我们使用了 Compiled
和 Multiline
两个选项。
保留指定标签
接下来需要对于保留的标签进行处理。假设我们想要保留所有的 a
标签,那么可以将以下代码加入到正则表达式中:
string preservedTags = "(a)";
Regex regex = new Regex($"<(?!{preservedTags})([a-z]+)(?:[\\s]+[^>]*)?(?:>|$)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);
这段代码使用了负向前瞻来匹配除了 a
标签之外的其他标签,同时使用了 Ignorecase
忽略大小写,确保对于大写字母和小写字母都能匹配成功。
需要注意的一点是,这里只保留了开头的标签,对于闭合标签不做处理。如果需要考虑闭合标签的话,需要适当地修改正则表达式。
完整示例
以下是一个完整的示例来展示该方法的使用:
string html = "<p>这是一段带有HTML标签的文本,其中包含一个<a href='#'>链接</a></p>";
string preservedTags = "(a)";
Regex regex = new Regex($"<(?!{preservedTags})([a-z]+)(?:[\\s]+[^>]*)?(?:>|$)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);
string result = regex.Replace(html, "");
Console.WriteLine(result);
输出:
<p>这是一段带有HTML标签的文本,其中包含一个<a href='#'>链接</a></p>
在这个示例中,我们只保留了 a
标签,并对于这个标签内的 HTML 代码不做处理,结果则是保留了原本的 HTML 代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#正则过滤HTML标签并保留指定标签的方法 - Python技术站