博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#菜鸟正则表达式一
阅读量:5067 次
发布时间:2019-06-12

本文共 2781 字,大约阅读时间需要 9 分钟。

  LZ菜鸟,仅整理笔记,顺带记录一下,谓之增加印象。

  LZ认为,没必要太纠结原理,模型, 屌丝能用就对了,剩下的事情用多了自然会去探索。

     中文:正则表达式,英文:Regular  ExPression,也叫匹配模式(pattern),用来检验字符串是否满足特定的规则,或从字符串捕获满足特定规则的子串。

     字符匹配

     最简单的正则表达式由“普通字符”和“通配符”组成。比如“Room\d\d\d”就是这样的正则表达式。

    

     其中 “Room” 是普通字符,而“\d”是通配符,表示该位置上有一个数字。该表达式一共占用了7个位置,第一个位置上是字母“R”,而第二个和第三个位置上都是位置“o”,第四个位置上是“m”,而第五个到第七个位置上是三个数字。所以正则表达式“Room\d\d\d”代表着以“Room”开头,以三个数字结尾的那一类字符串。比如字符串”Room010”,"Room111"都与“Room\d\d\d”匹配。

      

    这些特殊字符在正则表达式中称为元字。因为符号“ . ”在正则表达式里已有特殊符用处,所以要想表达“ . ”本身,需要使用它的转移符 “ \. ”,同样表达符号 ”\“本身,需要使用它的转移符”\\“。

    .NET提供了一批与正则表达式相关的类,它们都位于 using System.Text.RegularExpressions  命名空间里,现在我们来看下Regex类。

 

 

  Regex类的部分方法

    

      通过Regex.Matches()方法,可以从给定字符串中分解出所有与正则表达式匹配的子串,这些子串被保存在一个MatchCollection 型的集合中,每个子串都被看做Match类的对象。现在假设某份电子文件里包含着Kitty的房间号(格式如前面的 RoomXXX),档案很长,人工查阅费时费力,那么如何通过计算机帮我们找到房间号呢? 是时候祭出正则兄了!

     

小例子时间到了:       //命名空间 using System.Text.RegularExpressions;            string text = "kitty住在room415,tonny住在room332";            Regex expression = new Regex(@"room\d\d\d");            MatchCollection mathes = expression.Matches(text);//匹配的结果是一个集合            foreach(Match match in mathes)                Console.WriteLine(match);            Match match1 = expression.Match(text);//匹配结果是单个            Console.WriteLine(match1);            Console.WriteLine(match1.NextMatch());//下一个匹配            bool match2= expression.IsMatch(text);//是否有匹配            Console.WriteLine(match2);
            
 

 

     @前缀和转移字符  

      我们前面学习过控制文本格式的转移字符,如” \n “   " \" "   "  \t  "  " \\ "等,现在又学习了正则表达式的转移字符,如 " \. "  "  \w "  " \d "  "  \s  " "  \\ "等,在正则中它们是有区别的。

      Regex exoression=new Regex("\d");

     这样写就会出现错误,因为反斜杠 ”  \ “ 本身就是一个特殊的字符,要想表示反斜杠本身,需要使用它的转移符 ” \\ “ ,所以需要写成下面的形式:

      Regex expression =new Regex("\\d"); 

      但是这种形式会降低可读性,所以我们通常使用加 @ 前缀的方式。

  Regex expression =new Regex(@"\d");

      这时会忽略控制文本的格式的转移符,但不忽略正则表达式的转移符。

      添加前缀@后,如果字符串里需要引用双引号本身,就可以用连续的双引号来表示。

      Regex expression=new Regex(@"Say ""Hello"" ")

 

      @可选字符集

      除了通配符外,我们还可以把某个位置上允许出现的字符卸载方括号 [] 内,组成可选字符集,比如:

     

 

//可选字符:            string text = "Vitor-1970 Verne-1982 Regan-1998 Robin-2008";            Regex regex = new Regex(@"[VR][a-z]+-19[89][0-9]");//[VR][a-z]第一个字符V或者R,第二个字符a到z,+ 号表示后面都是a-z            foreach (Match match in regex.Matches(text))            Console.WriteLine(match);            反向字符:            string text2 = "dog bod fog hog log";            Regex regex2 = new Regex(@"[^bd]og"); //第一个字符非b或者d            foreach(var match in regex2.Matches(text2))         {
                Console.WriteLine(match);             } Console.WriteLine(match);

 

        或匹配符

      

string text3 = "there is a bee in the tree";            Regex regex3 = new Regex(@"(tr|b)ee"); //tr或者b+ee            foreach (var match in regex3.Matches(text3))            Console.WriteLine(match);

 

  Tips:鉴于正则表达式难以书写,常用的我们可以百度,入匹配注册信息之类的,如果自己编写不靠谱,可以使用 "Regex Tester"工具来测试。

转载于:https://www.cnblogs.com/legendtao/p/5212316.html

你可能感兴趣的文章
20.字典
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
oracle用户锁定
查看>>
(转)盒子概念和DiV布局
查看>>
Android快速实现二维码扫描--Zxing
查看>>
获取元素
查看>>
nginx+lighttpd+memcache+mysql配置与调试
查看>>
ubuntu12.04 启动apache2 对.htaccess 的支持
查看>>
proxy写监听方法,实现响应式
查看>>
前端工具----iconfont
查看>>
Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机
查看>>
Hello China操作系统STM32移植指南(一)
查看>>
cocos2dx CCEditBox
查看>>
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
查看>>
第一阶段冲刺06
查看>>
WIN下修改host文件并立即生效
查看>>
十个免费的 Web 压力测试工具
查看>>
ckeditor 粘贴后去除html标签
查看>>
面试题
查看>>
51Nod:活动安排问题之二(贪心)
查看>>