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-zforeach (Match match in regex.Matches(text))Console.WriteLine(match);反向字符:string text2 = "dog bod fog hog log";Regex regex2 = new Regex(@"[^bd]og"); //第一个字符非b或者dforeach(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+eeforeach (var match in regex3.Matches(text3))Console.WriteLine(match);

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

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

C#菜鸟正则表达式一相关推荐

  1. php 正则表达式 菜鸟,正则表达式菜鸟教程.pdf

    正则表达式菜鸟教程 正则表达式菜鸟教程 1开山篇教程 正则表达式 - 教程 正则表达式(Regular Expression)是一种文本模式,包括普通字符 (例如,a 到 z 之间的字母) 和特殊字符 ...

  2. 正则表达式教程手册、正则一点通(Chinar出品)

    C#语法之正则 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...

  3. Python 正则表达式应用总结,如何找出全部匹配文本

    文章目录 正则表达式介绍 一.正则表达式语法规则 二.Python中应用正则表达式 1.导入re标准库 2.如何找到所有匹配正则表达式的文本? Python re模块常用的几种正则表达式方式 总结 正 ...

  4. JS内置引用类型/内置对象

    JS内置引用类型/内置对象 概述 对象在 JavaScript 中被称为引用类型的值/实例,在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称 ...

  5. 菜鸟教程python正则表达式_Python正则表达式常用函数菜鸟教程

    这篇文章主要为大家详细介绍了Python正则表达式常用函数菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! Py ...

  6. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  7. java正则表达式的菜鸟使用分析

    学习这个东西,菜鸟主要参考的是这两篇文章:Java正则多字符串匹配替换(网址:http://www.jb51.net/article/34154.htm).学习正则表达式:Matcher类(网址:ht ...

  8. Python正则表达式简单说明(菜鸟教程里面的说明)

    摘自菜鸟教程 ::大家可以去看一下 挺有用的 正则表达式--可选标志含义 re.match()::匹配开头 re.search()::全部匹配 源自:http://www.runoob.com/pyt ...

  9. 菜鸟python 正则表达式_python基础知识(进阶篇--正则表达式)

    含义:检查一个字符串是否与某种模式匹配,由re模块提供. re.match() re.match(匹配的正则表达式,要匹配的字符串,标志位) //尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹 ...

最新文章

  1. MySQL:left join 避坑指南
  2. 一文解析激光雷达中时序融合的研究现状和发展方向
  3. 数据库系统(四)——触发器
  4. SAP Data Intelligence Modeler的一些使用截图
  5. sparksql保存数据常见操作
  6. 开发代码code中变量替换
  7. 【Elasticsearch】 Elasticsearch中数据是如何存储的
  8. 2021全国大学生电子设计竞赛论文(智能送药小车(F题))(电赛论文模板)
  9. 一种依靠压缩电磁铁制造暗物质虫洞的机器
  10. word转html分页符,Word分页符、分栏符、换行符、分节符的作用
  11. Redis Cluster 原生搭建(二)meet
  12. Kik CEO Ted Livingston发博称要成为西方的微信?
  13. Java Fx 使用详解
  14. 0x000000f怎么修复 win10_win10系统开机蓝屏错误代码0xc000000f怎么解决
  15. decorators 参数_Django中decorators装饰器的使用
  16. 灵魂发问!线程池到底创建多少线程比较合理?
  17. 作为程序员要多注意身体(华佗教你睡觉)
  18. 嵌入式编程技巧(持续更新)
  19. 前端学习笔记之——初探HTML5
  20. C 与 C++ 的 static 关键字全解

热门文章

  1. mysql中文显示问号
  2. Java线程:新特征-有返回值的线程(转)
  3. QQ 互联审核不通过问题的解决方法
  4. sqlserver 2008 多表更新
  5. GridView 72般绝技
  6. Linux学习记录-7
  7. git 在 A 项目中引用 B 项目
  8. 微信小程序实现支付功能
  9. vGPU作为主流平台的进化之路
  10. JavaSE学习总结第08天_面向对象3