c#Regex分組取值

來源:互聯網
上載者:User

注:採集專用

就速度而言,當然是Regex最快,最高效了,下面談談如何用Regex分組來實現採集

先分析下正則取值相比非正則取值來說,他的優勢在哪

這次的例子稍微弄複雜點

  <tr>
    <td class="odd"><a href="/files/article/info/96/96231.htm">地皇傳說</a></td>
    <td class="even"><a href="/files/article/html/96/96231/index.shtml" target="_blank">孤心情劫 第一百零四章 孤心之心</a></td>
    <td class="odd">孤獨漂流</td>
    <td class="even">449K</td>
    <td class="odd" align="center">07-09-16</td>
    <td class="even" align="center">連載</td>
  </tr>
  <tr>
    <td class="odd"><a href="/files/article/info/95/95119.htm">符籙驚神</a></td>
    <td class="even"><a href="/files/article/html/95/95119/index.shtml" target="_blank">第一卷 第一百章 多重幻境</a></td>
    <td class="odd">不鏽</td>
    <td class="even">463K</td>
    <td class="odd" align="center">07-09-16</td>
    <td class="even" align="center">連載</td>
  </tr>

如果按先前寫的非Regex函數來取值的話,很明顯就會出錯,假如我想把裡面的"孤獨漂流"取出來,那一定是這

樣GetKeyValue(HtmlCode,"<td class=\"odd\">","</td>",1) ,函數裡"1"這個值就大錯特錯了,因為上面也有個類似

的,取1的話就會把"<a href="/files/article/html/96/96231/index.shtml" target="_blank">孤心情劫 第一百零四章

孤心之心</a>"取出來,如果函數是GetKeyValue(HtmlCode,"<td class=\"odd\">","</td>",2),參數值是2的話才能取

得到自己想要的,也就是說,還要在函數內部加判斷才行,但如果下次再遇到另外的矛盾呢?函數又要重寫了,這樣就

太麻煩了.

如果用Regex分組來取值的話,就不會出現上面所說的問題,函數可以一直用一個,需要改的只是Regex.

Regex函數如下

        /// <summary>
        /// Regex取值
        /// </summary>
        /// <param name="HtmlCode">源碼</param>
        /// <param name="RegexString">Regex</param>
        /// <param name="GroupKey">Regex分組關鍵字</param>
        /// <param name="RightToLeft">是否從右至左</param>
        /// <returns></returns>
        public string[] GetRegValue(string HtmlCode , string RegexString,string GroupKey,bool RightToLeft)
        {
            MatchCollection m;
            Regex r;
            if (RightToLeft == true)
            {
                r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);
            }
            else
            {
                r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            }
            m= r.Matches(HtmlCode);
            string[] MatchValue = new string[m.Count];
            for (int i = 0; i < m.Count; i++)
            {
                MatchValue[i] = m[i].Groups[GroupKey].Value;
            }
            return MatchValue;
        }

現在,要想取"孤獨漂流",只需改Regex了

string RegexString = "<td class=\"odd\">(?<Title>[^<].*?)</td>";

string[] title = GetRegValue(HtmlCode, RegexString, "Title", true);

title[0]的值就是"孤獨漂流",title[1]的值是"不鏽"

最後再舉個例子,假如我想取"<a href="/files/article/html/96/96231/index.shtml" target="_blank">孤心情劫 第一

百零四章 孤心之心</a>"裡的網址和標題.

string RegexString = "<a href=\"(?<Url>.*?)\" target=\"_blank\">(?<Title>[^<].*?)</a>";

string[] url = GetRegValue(HtmlCode, RegexString, "Url",  true);

string[] title = GetRegValue(HtmlCode, RegexString, "Title", true);

url[0]的值是"/files/article/html/96/96231/index.shtml",url[1]的值是"/files/article/html/95/95119/index.shtml"

title[0]的值是"孤心情劫 第一百零四章 孤心之心",title[1]的值是"第一卷 第一百章 多重幻境"

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/bingqimao/archive/2007/09/18/1789777.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.