c#正则表达式分组取值

原创 2007年09月18日 15:07:00
注:采集专用

就速度而言,当然是正则表达式最快,最高效了,下面谈谈如何用正则表达式分组来实现采集

先分析下正则取值相比非正则取值来说,他的优势在哪

这次的例子稍微弄复杂点

  <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>

如果按先前写的非正则表达式函数来取值的话,很明显就会出错,假如我想把里面的"孤独漂流"取出来,那一定是这

样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的话才能取

得到自己想要的,也就是说,还要在函数内部加判断才行,但如果下次再遇到另外的矛盾呢?函数又要重写了,这样就

太麻烦了.

如果用正则表达式分组来取值的话,就不会出现上面所说的问题,函数可以一直用一个,需要改的只是正则表达式.

正则表达式函数如下

        /// <summary>
        /// 正则表达式取值
        /// </summary>
        /// <param name="HtmlCode">源码</param>
        /// <param name="RegexString">正则表达式</param>
        /// <param name="GroupKey">正则表达式分组关键字</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;
        }


现在,要想取"孤独漂流",只需改正则表达式了

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]的值是"第一卷 第一百章 多重幻境" 
 

相关文章推荐

C#程序中利用正则表达式对字符串分组并获取组值

匹配时设置 显示捕获 选项 获取捕获的多个内容后,循环输出 获取捕获的多个分组后,循环输出...
  • pp_fzp
  • pp_fzp
  • 2016年07月01日 16:21
  • 3152

C# 正则表达式取值

C# 正则表达式取值

C#简单实现高亮语法编辑器

C#简单实现高亮语法编辑器(一)          ——TextBox ,RichTextBox的局限性 一、RichTextBox基本设置 二、实现语法高亮 三、关键字提示 四、实...

Winform语法高亮的编辑器比拼

 Winform语法高亮的编辑器比拼 沈胜衣 ,2008年01月08日   ...

C#正则表达式(3):注释,分组,向后引用,零宽断言,贪婪

注释   任何程序语言都会有注释.不然很多代码不容易看懂啊.像正则表达式这种表达式如果来个几千行,没一点注释,你想不看得吐血都难啊. 注释的格式是(?#comment)其中comment就表示注...

C#正则表达式(RegEx)高级应用之分组(Group)替换(Replace)

对于复杂的、符合一定规则的字符串替换来说,正则表达式无疑是强悍和高效的选择 对于正则表达式的使用,我也写过几篇帖子了,具体可以见下面的地址 http://zu14.cn/tag/regex/ 今...
  • yenange
  • yenange
  • 2011年11月23日 10:05
  • 2316

Python正则表达式之: (…) group 分组

下面就来解释一下,Python中的(…)的含义和用法: 1.(…) 用来匹配符合条件的字符串。并且将此部分,打包放在一起,看做成一个组,group。 2. 而此group,可以被后续的(正...

javascript正则表达式(3)——贪婪模式与分组

贪婪模式 "12345678"          正则: \d{3,6} 贪婪模式:会尽可能多的匹配,直到匹配失败 例如:'12345678'.replace(/\d{3,6}/g,'X'); ...

正则表达式(三)分支条件 分组

本应该昨晚写这篇博客的,但由于昨晚太累,才拖到今天早晨。今天继续接着上两节讲的,主要学习分支条件,,分组、反义和反向引用 一、分支条件 用本人的话说分支条件就是Java || 关系。存在多个正则条...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#正则表达式分组取值
举报原因:
原因补充:

(最多只允许输入30个字)