c#正则表达式分组取值
来源:互联网 发布:制作手机相册软件 编辑:程序博客网 时间:2024/05/16 01:57
就速度而言,当然是正则表达式最快,最高效了,下面谈谈如何用正则表达式分组来实现采集
先分析下正则取值相比非正则取值来说,他的优势在哪
这次的例子稍微弄复杂点
<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#正则表达式分组取值
- c#正则表达式分组取值
- C# 正则表达式取值
- 正则:分组取值
- 正则表达式 GROUP 分组 C#
- java正则表达式取各分组
- c#非正则表达式取值(下一篇准备写正则表达式取值)
- C#中正则表达式的分组构造
- .net c#中应用正则表达式分组
- 正则表达式取值
- c# 正则表达式 根据cookie名字取值
- 正则表达式分组表达式
- C#程序中利用正则表达式对字符串分组并获取组值
- 正则表达式之分组
- 正则表达式-分组
- 正则表达式 分组捕捉
- 正则表达式Group分组
- 正则表达式-分组
- English paper
- CollectGarbage函数--JS清理垃圾,内存释放
- oracle子查询用途
- 360与企鹅开战之后的思考
- 头痛日记2010/11/03
- c#正则表达式分组取值
- 难以抉择的选择无对错,坚定地走好当前选择是王道
- window.showModalDialog实例
- SVN服务端Subversion与客户端TortoiseSVN教程--解决同步问题
- 致QQ、360的一封信
- C# 正则表达式取值
- 使用http 上传文件的原理
- Ubuntu中设置中文输入法
- 验证数字的正则表达式集