滤掉 html标记_正则表达式问题
大家好! 我遇到了一个正则表达式问题
Regex rx = new Regex(@ "( <\/?(?!td|tr|u|table|img|div|span|br|object|select|/select|OPTION|/OPTION|param| |sup|/sup|sub|/sub|p|/p)[^> \/]*)\/?> | <![^> ]+> ", RegexOptions.IgnoreCase);
string result = rx.Replace(str, " ");
我的目的是 滤掉 html标记(除tr|u|table|img|div|span.....特殊标记)
遇到问题是
str= " <font> 111 <IMG ondblclick=Modify(this); title=\ "wertewt < < < 123.GIF\ "> </font> ";
应得到结果:
111 <IMG ondblclick=Modify(this); title= "wertewt < < < 123.GIF " >
但实际 我得到的是 111 <IMG ondblclick=Modify(this); title= "wertewt
------解决方案--------------------你想滤掉 html 标记,建议你不要用一个模式处理所有标记,可以写一组模式,每个模式滤掉一个标记,用循环来处理。这样做有两个好处,首先,每个标记的模式都很简单,日后很好理解,其次,你可以在外部文件中记录这组模式,当你想增加两个标记时不需要重新编译。
比如去掉 font,用这个模式把原来的串换成 $1,(?is: <font> (.*?) </font> )
------解决方案--------------------LS是否考虑过下面这个问题
<IMG ondblclick=Modify(this); title=\ "wertewt < < < 123.GIF\ ">
如果考虑并解决了,那么一个正则就全部解决了,根本用不着多个正则,如果上面这个问题没有解决,那么再多的正则也没用
另外就是正则效率本来就低,如果再写多个正则,每个正则去循环替换一次,那效率就不用想了。。。
因为可能在 " "或 ' '内锯含“ <”和“> ”这两个字符,所以无法使用平衡组来做,只能用多重匹配,但写了一个,在测试工具里通过,程序里会导致程序崩溃,正则解决这类问题还是比较吃力的
在另一个帖子里我用有限状态机实现了,可以做下参考
http://community.csdn.net/Expert/topic/5744/5744945.xml?temp=.806698
------解决方案--------------------html的规则其实很复杂的。 <(\w+)> [^ <]+ <\1> 这样的,或者没有后面部分的。或者嵌套的。规则复杂的还是交给.net作好了。你html放到webbrower里头,然后用outterText获取文本。