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

请教用正则表达式取HTML中的字段
HTML code
 <tr> <td> 
<img border='0' src='/_layouts/images/reportsup.gif' alt='Reports to' />
</td> <td>User1 </td>
</tr>

<tr> <td>
<img src="/_layouts/images/reportsdown.gif" alt="Manager">
</td> <td>User2 </td>
</tr>

<tr> <td>
<table> <tr> <td>
<span/>
</td> </tr> </table>
</td> <td>User3 </td>
</tr>


是否可以用正则表达式从上面这段HTML代码中取得下面的数组?取出图片的地址就可以,这个<img/>可能没有,但是user名字肯定存在。可以用证则表达式一次取出来么?
arr[0][0]="/_layouts/images/reportsup.gif" //地址
arr[0][1]"User1"
arr[1][0]="/_layouts/images/reportsdown.gif"
arr[1][1]"User2"
arr[2][0]=""
arr[2][1]"User3"

多谢

------解决方案--------------------
C# code

            //取出图片路径
            MatchCollection mc;
            Regex r = new Regex(@"<img.*?src=(?:""|')?(.*?\.(?:jpg|gif)).*?");
            mc = r.Matches("这里填写你要找的HTML代码 赋值给一个字符串");
            for(int i = 0;i<mc.count;i++)
            {
                //mc[i]就是图片路径了
            }

------解决方案--------------------
C# code

            Regex xxx=new Regex("src=('|\")(?<text>.*)('|\")( alt)");
            string[,] arr = new string[,] { { "","" }, { "","" } };
            int i = 0;
            int j = 0;
            foreach (Match m in xxx.Matches(str)) //str为HTML文档
            {
                //MessageBox.Show(xxx.Match(str).Groups["text"].Value);
                arr[i, j] = m.Groups["text"].Value;
                arr[i++,j + 1] = "User" + i.ToString();
            }
            string x="";  //以下为检测用
            for(int ix=0;ix<i;ix++)
            {
                x+=arr[ix,0].ToString();
                x+="\r\n";
                x+=arr[ix,1].ToString();
                x+="\r\n";
            }
            MessageBox.Show(x);

------解决方案--------------------
C# code
 
    /// <summary>
    /// 返回一组标签中指定属性的值小写格式
    /// 属性值必须被双引号括起来。
    /// </summary>
    /// <param name="Tag">一组标签 </param>
    /// <param name="TagName">属性名称 </param>
    /// <returns>属性的小写值 </returns>
    private string TagVal(string tag, string tagName)
    {
      Regex rt = new Regex(@"(? <Keyword>\w+)\s*=\s*(? <Value>" + "\"" + "[^\"]*\")", RegexOptions.Compiled | RegexOptions.IgnoreCase);
      foreach (Match mt in rt.Matches(tag)) {
        if (mt.Groups["Keyword"].ToString().Trim().ToLower() == tagName.ToLower()) {
          return mt.Groups["Value"].ToString().ToLower().Replace("\"", "");
        }
      }
      return null;
    }
    ///去掉所以的html标签,如 <a>aabcd </a>  返回的是aabcd
    private string DropHTML(string strHtml)
    {
      return Regex.Replace(strHtml, " <[^>]*>", "");
    }