zoukankan      html  css  js  c++  java
  • .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,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/>");
     
                //}
     
     
  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/wanghl/p/3897213.html
Copyright © 2011-2022 走看看