千金散尽写代码

导航

.net 正则表达式的应用

 
string srcString = " <td align=\ " center\ " ><ul><li>查询结果1:北京市 网通</li><li>查询结果2:北京市 网通</li><li>查询结果3:北京市 网通</li></ul></td> " ;
// 匹配 "<li>查询结果1:" 与 "</li>" 之间的所有字符的正则表达式
string regexStr = " <li>查询结果1:(?<key>.*?)</li> " ;
Regex r = new Regex(regexStr, RegexOptions.None);
Match mc = r.Match(srcString);
string dataStr = mc.Groups[ " key " ].Value;

//dataStr 就是我们要得的数据:“北京市 网通”。

说明: 
这里最关键的是设置正则表达式: " <li>查询结果1:(?<key>.*?)</li> "。 

字符

描述

<key>

根据key获取由正则表达式匹配的值。

.(一点)

匹配除 "\n" 之外的任何单个字符。

*

匹配前面的子表达式零次或多次。

?

跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的;非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

 
 1.实战
抓取http://112.5.192.218/(S(5zq44xt4neqr0ct5najcbs5t))/ui/rtm/tourIntroduce.aspx?tourid=2&tourname=%E7%A6%8F%E6%B8%85%E7%9F%B3%E7%AB%B9%E5%B1%B1&typeid=1"
这具网页的PM2.5等
 
 protected void Page_Load(object sender, EventArgs e)
    {
 
        if (!IsPostBack)
        {
            var textHtml = ExecuteRequest("http://112.5.192.218/(S(5zq44xt4neqr0ct5najcbs5t))/ui/rtm/tourIntroduce.aspx?tourid=2&tourname=%E7%A6%8F%E6%B8%85%E7%9F%B3%E7%AB%B9%E5%B1%B1&typeid=1");
 
            // Response.Write(textHtml);
            Dictionary<string, Regex> regs = new Dictionary<string, Regex>();
            regs.Add("airQuality", new Regex("<li class=\"liwidth1\">空气质量<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<airQuality>.*?)</li>", RegexOptions.None));
            regs.Add("pm25", new Regex("<li class=\"liwidth1\">P&nbsp;M&nbsp;2.5<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<pm25>.*?)</li>", RegexOptions.None));
            regs.Add("noi", new Regex("<li class=\"liwidth1\">负氧离子<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<noi>.*?)</li>", RegexOptions.None));
            regs.Add("time", new Regex("<li class=\"liwidth1\">上传时间<li class=\"liwidth2\">:</li></li><li class=\"liwidth\">(?<time>.*?)</li>", RegexOptions.None));
 
            Match airMc = regs["airQuality"].Match(textHtml);
            string airQuality = airMc.Groups["airQuality"].Value;
 
            Match pmMC = regs["pm25"].Match(textHtml);
            string pm25 = pmMC.Groups["pm25"].Value;
 
            Match noiMc = regs["noi"].Match(textHtml);
            string noi = noiMc.Groups["noi"].Value;
 
            Match timeMc = regs["time"].Match(textHtml);
            string time = timeMc.Groups["time"].Value;
 
            Response.Write("空气质量:" + airQuality + "P M2.5: " + pm25 + "负氧离子:" + noi + "上传时间:" + time);
        }
 
    }
 
    public string ExecuteRequest(string request)
    {
        try
        {
            string textResponse = "";
            HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(request);
            objWebRequest.Method = "GET";
            objWebRequest.ContentType = "application/x-www-form-urlencoded";
 
            HttpWebResponse response = (HttpWebResponse)objWebRequest.GetResponse();
            using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.Default))
            {
                textResponse = sr.ReadToEnd();
            }
            return textResponse;
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
            return "";
        }
    }
 
 
2.抓取网页带http网页的网址:
 
 
 
          //读取html
            var textHtml = File.ReadAllText(Server.MapPath("fy.txt"));
         //如果有多个正则
            Dictionary<string, Regex> regs = new Dictionary<string, Regex>();
            regs.Add("fy", new Regex("<a class=\"open\" href=\"http://(?<url>.*?)\" target=\"_blank\">(?<name>.*?)</a>", RegexOptions.None));
     
 
            MatchCollection fyCollection = regs["fy"].Matches(textHtml);
 
            foreach (Match m in fyCollection)
            {
                string url = m.Groups["url"].Value;
                string name = m.Groups["name"].Value;
                Response.Write(name + "" + "http://" + url + "<br/>");
            }
 
 
 
 
            //for (int i = 0; i < fyCollection.Count; i++)
            //{
 
            // Response.Write(fyCollection[i].Groups["name"].Value+" http://"+ fyCollection[i].Groups["url"].Value+"<br/>");
 
            //}
 
 

posted on 2014-08-07 15:04  千金散尽写代码  阅读(465)  评论(0编辑  收藏  举报