正则表达式规则总结

    xiaoxiao2022-07-13  158

    主要来源:https://www.cnblogs.com/caokai520/p/4511848.html

    建议先看视频,然后再看文档,我当初就是嫌弃文字太长,一直断断续续的看,后来看了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());
    最新回复(0)