正则表达式去除锚标记之间的所有内容

时间:2010-01-19 13:04:32

标签: c# .net regex asp.net-3.5

我试图从html字符串中删除锚点标记之间的所有链接和文本,如下所示:

 string LINK_TAG_PATTERN = "/<a\b[^>]*>(.*?)<\\/a>";

 htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, string.Empty);

这不起作用有人有想法吗?

非常感谢,

编辑:正则表达式来自此链接Extract text and links from HTML using Regular Expressions

5 个答案:

答案 0 :(得分:4)

使用HTML Parser而非正则表达式来解析HTML。

HTML Agiliity Pack

答案 1 :(得分:3)

字符串中的问题:开头不必要的斜杠(即Perl语法),非转义反斜杠(\b),不必要的反斜杠(\\)。

因此,如果 成为正则表达式,考虑到其他人已经链接到的所有警告,请尝试

string LINK_TAG_PATTERN = @"<a\b[^>]*>(.*?)</a>";
htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, string.Empty, RegexOptions.IgnoreCase);

\b是必要的,以防止以a开头的其他代码进行匹配。

答案 2 :(得分:2)

我建议Expresso对正则表达式进行问题排查。您可以找到正则表达式库here

您可以考虑使用javascript来遍历DOM树以替换正则表达式。

答案 3 :(得分:2)

string LINK_TAG_PATTERN = @"(<a\s+[^>]*>)(.*?)(</a>)";

htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, "$1$3", RegexOptions.IgnoreCase);

答案 4 :(得分:0)

从概念上讲,这只会剥离一种非常特殊的链接(例如,你的正则表达式与大写字母A不匹配,它在HTML中完全有效:<A ...>bla</A>。替换也不适用于javascript链接。是您的代码与用户安全性相关吗?