正则表达式里,推断 包括某些字符串 是异常轻易明白的,然则怎样推断 不包括某些字符串 (是字符串,不是字符,是某些,不是某个) 确实是个费解的事.
<(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+>
这个正则是推断HTML标签不包括 li / ul / a / img / br / span / b 的,就上面的请求来讲,是要 删除 除这里列出的HTML标签,这也是我探索了很长时候才搞出来的.
(?!exp) 婚配背面跟的不是exp的位置
/?\s? 我一开始试着把它写到最前面的 < 背面,然则测试失利了.
下面是一个简朴的函数,把要保存的TAG串起来,生成一个正则表达式,然后把不需要的TAG删除...
private static string RemoveSpecifyHtml(string ctx) { string[] holdTags = { "a", "img", "br", "strong", "b", "span" };//要保存的 tag // <(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+> string regStr = string.Format(@"<(?!((/?\s?{0})))[^>]+>", string.Join(@")|(/?\s?", holdTags)); Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase); return reg.Replace(ctx, ""); }
修改:
上面的正则,假如保存了 li , 现实运转会发明 link 也给保存下来了, 保存 a 会把 addr 也给保存下来, 解决办法就是加 \b 断言.
<(?!((/?\s?li\b)|(/?\s?ul)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+> private static string RemoveSpecifyHtml(string ctx) { string[] holdTags = { "a", "img", "br", "strong", "b", "span", "li" };//保存的 tag // <(?!((/?\s?li\b)|(/?\s?ul\b)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+> string regStr = string.Format(@"<(?!((/?\s?{0})))[^>]+>", string.Join(@"\b)|(/?\s?", holdTags)); Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase); return reg.Replace(ctx, ""); }
更多asp.net正则表达式删除指定的HTML标签的代码相干文章请关注ki4网!