正则表达式规则总结

本文介绍了C#正则表达式的基础知识,包括如何使用特殊字符模式表示字符串,以及正则表达式的强大工具——Regex类。重点讲述了分组的概念,如普通分组 `(exp)` 和命名分组 `(?<name>exp)` ,在匹配和提取信息时的应用,特别是在爬虫中的实用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要来源:C# 正则表达式 - 每日一bo -C# 正则表达式 - 每日一bo - 博客园C# 正则表达式 - 每日一bo -

建议先看视频,然后再看文档,我当初就是嫌弃文字太长,一直断断续续的看,后来看了C#的基础视频,其实也没多少。网上的免费视频会讲解基础的,读懂了基础,看文字也不累了。查找非匹配的知识点没加上,有时间补上。

文章导读

     正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串。正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法。Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。

基础梳理

说明:

由于在正则表达式中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如 希 望在字符串中至少有一个“ \ ”,那么正则表达式应该这么写: \\+ 。

数字举例

            @即我们不需要对转义字符加上 \ (反斜扛)
            // 以数字开头,以数字结尾
            Regex reg = new Regex(@"^[0-9]*$");
            //n位的数字{n}匹配n次
            Regex reg = new Regex(@"^\d{n}$");
            //至少n位的数字{n,}
            Regex reg = new Regex(@"^\d{n,}$");
            //m-n位的数字{m,n}
            Regex reg = new Regex(@"^\d{m,n}$");
            //零和非零开头的数字
            Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
            //非零开头的最多带两位小数的数字+匹配前面的一次或多次的子表达式
            // ?匹配前面的或0次或一次的子表达式
            Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$");
            //带1-2位小数的正数或负数
            Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
            //正数、负数、和小数(\-|\+)(负数或者正数)
            Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");
            //有两位小数的正实数
            Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
            //有1~3位小数的正实数
            Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$");
            //非零的正整数*匹配前面2次或多次的
            Regex reg = new Regex(@"^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$");
           

(exp)分组

在做爬虫时我们经常获得A中一些有用信息。如href,title和显示内容等。

在正则表达式里使用()包含的文本自动会命名为一个组。

说明:反义元字符所对应的元字符都能组合匹配任意字符。如:[\w\W],[\s\S],[\d\D]..

string TaobaoLink = "<a href=\"http://www.taobao.com\" title=\"淘宝网 - 淘!我喜欢\" target=\"_blank\">淘宝</a>";
RegexStr = @"<a[^>]+href=""(\S+)""[^>]+title=""([\s\S]+?)""[^>]+>(\S+)</a>";
Match mat = Regex.Match(TaobaoLink, RegexStr);
for (int i = 0; i < mat.Groups.Count; i++)
{
    Console.WriteLine("第"+i+"组:"+mat.Groups[i].Value);
}

(?<name>exp) 分组取名

    通过(?<name>exp)可以很轻易为分组取名。然后通过Groups["name"]取得分组值。

当我们匹配分组信息过多后,在某种场合只需取当中某几组信息。这时我们可以对分组取名。通过分组名称来快速提取对应信息。

string Resume = "基本信息姓名:CK|求职意向:.NET软件工程师|性别:男|学历:本专|出生日期:1988-08-08|户籍:湖北.孝感|E - Mail:9245162@qq.com|手机:15000000000";
RegexStr = @"姓名:(?<name>[\S]+)\|\S+性别:(?<sex>[\S]{1})\|学历:(?<xueli>[\S]{1,10})\|出生日期:(?<Birth>[\S]{10})\|[\s\S]+手机:(?<phone>[\d]{11})";
Match matc = Regex.Match(Resume, RegexStr);
Console.WriteLine("姓名:{0},手机号:{1}", matc.Groups["name"].ToString(), matc.Groups["phone"].ToString());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值