正则表达式使用心得

最近需要使用正则表达式捕获网页内容。一些心得记录如下

1.贪婪模式和非贪婪模式:正则表达式默认是贪婪模式,也就是说在满足条件的情况下尽量多捕获内容,而非贪婪模式则相反,尽量捕获少的内容,往往需要捕获如<tr><td><table><tr></tr></table></td></tr>最内层<tr></tr>需要使用非贪婪模式,如果需要捕获到最外层<tr></tr>需要使用贪婪模式。二者的区别在于f非贪婪模式使用.*?

2.捕获分组。使用括号对正则式进行分组,然后使用Group索引获取捕获的分组内容

例子如下

 

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace WebSearchNew
{
    
class Program
    {
        
static void Main(string[] args)
        {
            Test();
            Console.Read();
        }

        
public static void Test()
        {
            StringBuilder str 
= new StringBuilder();
            str.Append(
"<TD width=5 height=31><IMG src=\"images/dian.gif\" border=0></TD>");
            str.Append(
"<TD vAlign=midden align=left>&nbsp;&nbsp;<A class=DLink title=济南市国有建设用地使用权挂牌出让公告-济国土资告字[2009]31号");
            str.Append(
"οnclick=\"javascript:return pub_showContent(this.href,'550','530');\"");
            str.Append(
"href=\"http://www.jndlr.gov.cn/ecdomain/framework/jngtzyj/kdaoflll-ghkh-bbno-ljla-mkjmfpmciooh.do?isfloat=1&amp;disp_template=templatedefault&amp;fileid=20091009122105781\"");//匹配链接
            str.Append("target=_blank height=\"31\" width=\"158\">济南市国有建设用地使用权挂牌出让公告-济国土资告字[2009]31号</A></TD>");
            
string html = str.ToString();

            
//匹配目标:http://www.jndlr.gov.cn/ecdomain/framework/jngtzyj/kdaoflll-ghkh-bbno-ljla-mkjmfpmciooh.do?isfloat=1&amp;disp_template=templatedefault&amp;fileid=20091009122105781
            Regex r0 = new Regex("href=\".*\"");//贪婪模式捕获最大匹配内容
            Regex r1 = new Regex("href=\"(.*?)\"");//非贪婪模式捕获最小匹配内容 .*?
            Regex r2 = new Regex("\"158\">(.*?)</A>");//捕获括号内内容即:济南市国有建设用地使用权挂牌出让公告-济国土资告字[2009]31号
            Regex r3 = new Regex(@"20\d\d");//捕获括号内内容即:2009
            string links0 = r0.Matches(html)[0].Groups[1].Value;
            
string links = r1.Match(html).Groups[1].Value;//捕获第一分组,正则表达式Index从1开始而非0
            string title = r2.Match(html).Groups[1].Value;
            
string year = r3.Match(title).Value;
            Console.WriteLine(links);
            Console.WriteLine(title);
            Console.WriteLine(year);
        }
    }
}

 

转载于:https://www.cnblogs.com/thornfield_he/archive/2009/10/28/1591247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值