正则表达式匹配html标签内的字符串

时间:2023-01-21 05:38:44

项目中得到一个页面的html字符串,需要得到html标签中<textarea></textarea>间的值,

参考了网上的例子:

    string str = "aaa[12] bbbc[zxt] ccvcvcvxcvx[@5]xxcxcxcxc[f1]dsdsd";
Regex reg = new Regex(@"(?<=\[)[^\[\]]+(?=\])");

 这个是得到[ ]中的值,我现在得到的是类似这样的字符串:

<table width=\"640\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tablestyle\">\n <tr>\n    
<td width=\"100\" height=\"70\" align=\"center\" class=\"rowtitle\">来文单位</td>\n <td width=\"250\">\n
<
textarea id=\"txtDw\" type=\"text\" style=\"width:250px;overflow:hidden;height:60px;\" field=\"dw\" name=\"dw$gw_cjgwsw\">
财经工委收文阅办卡财经工委收文阅办卡
</textarea>\n
</td>\n   
<td width=\"60\" align=\"center\" class=\"rowtitle\">文号</td>\n   
<td width=\"120\" align=\"center\">\n     
<textarea id=\"txtWh\" type=\"text\" style=\"width:100px;overflow:hidden;height:60px;\" field=\"wh\" name=\"wh$gw_cjgwsw\">
123456
</textarea>
\n    </td>\n 

现在要取<textarea></textarea>间的字符,上面那个例子自己完全没看懂,无奈只能用笨办法了:

        Regex reg3 = new Regex(@"(<textarea([\s\S]*?)</textarea>)");
MatchCollection mc
= reg3.Matches(s);

var list = new List<string>();
for (int i = 0; i < mc.Count; i++)
{
list.Add( mc[i].Value);
}
for (int i = 0; i < list.Count; i++)
{
if (list[i].IndexOf("id=\"txtDW\"") != -1)
{
int start = list[i].IndexOf(">");
int end = list[i].IndexOf("</textarea>");
txtResult.Text
= list[i].Substring(start+1,end-(start+1));
break;
}
}


用了这样一个正则 Regex reg3 = new Regex(@"(<textarea([\s\S]*?)</textarea>)")
因为<textarea>内还有id style等其它属性,所以只能先把整个<textarea></textarea>取出来,

然后再取标签中间的值;

PS:正则真是好东西,以后一定得把正则好好看看,能省不少事。