日期:2014-05-18  浏览次数:20525 次

|M| 学习正则第二贴:HTML源码,根据里面的某个标示Replace掉这些文字
http://community.csdn.net/Expert/topic/5568/5568768.xml?temp=.4035456
求一个正则要求是
以: <tr     开头  
以: </tr>     结束
中间包含文字:   <div
且中间不包含文字:   runat= "server "

HtmlContent   =   Regex.Replace(HtmlContent,   "?? ",   " ",   RegexOptions.IgnoreCase);

谢谢

------解决方案--------------------
正则是弱项,看看
------解决方案--------------------
頂..........,學習
------解决方案--------------------
up
------解决方案--------------------
关注
------解决方案--------------------
UP
------解决方案--------------------
正在学习,不会
------解决方案--------------------
楼主最好给几个例子,没例子做测试比较麻烦,而且未必符合楼主要求

按楼主要求,写了两种方法,第一种用法简单,但是效率不高,第二种写起来麻烦点,但用起来会比第一种灵活,大数据量的效率应该会高些

方法一:直接replace
stirng yourStr = .............;
string resultStr = Regex.Replace(yourStr, @ " <tr\s(?=[\s\S]*? <div[\s\S]*? </tr> )(?![\s\S]*? runat= " "server " "[\s\S]*? </tr> )[^> ]*> [\s\S]*? </tr> ", " ", RegexOptions.IgnoreCase);


方法二:使用委托
string resultStr = Regex.Replace(yourStr, @ " <tr\s[^> ]*> [\s\S]*? </tr> ", new MatchEvaluator(expReplace), RegexOptions.IgnoreCase);

private string expReplace(Match m)
{
if (Regex.IsMatch(m.Value, @ " <div ") && !Regex.IsMatch(m.Value, @ "runat= " "server " " "))
{
return " ";
}
else
{
return m.Value;
}
}

PS:如果楼主想学正则,我倒是可以推荐个教程和工具,正则入门很容易,但是要精通,就需要做大量的练习,呵呵,不是一两帖就可以做到的

------解决方案--------------------
up
------解决方案--------------------
lxcnn(过客) ( ) 信誉:
-----------------------
你推荐的教程和工具地址呢?
谢谢!
------解决方案--------------------
\ <tr..?\ <div..[^runat=\ "server\ "]..\ <\\tr\>

放弃perl5太难了吧
------解决方案--------------------
<tr> <td.*?> <div\s+id= "div "> .*? </td> </tr>
------解决方案--------------------
学习了

------解决方案--------------------
呵呵,我给你破解了它
------解决方案--------------------
呵呵,如果这样就要谢过楼上了,没玩过破解,不知从哪入手
------解决方案--------------------
学习~
------解决方案--------------------
学习~~