• .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/>");
     
                //}
     
     
  • 相关阅读:
    ssh2整合velocity出现Unable to find resource
    struts2之PreResultListener(转)
    Struts2源码浅析-请求处理(转)
    大型WEB网站架构深入分析
    大型网站技术架构探讨
    网易大型应用架构与实践
    二叉树及各种二叉树的应用
    centOS上安装MySQL5.7
    Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool
    elasticsearch的插件安装
  • 原文地址:https://www.cnblogs.com/wanghl/p/3897213.html
Copyright © 2020-2023  润新知