C#菜鸟正则表达式一
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#菜鸟正则表达式一相关推荐
- php 正则表达式 菜鸟,正则表达式菜鸟教程.pdf
正则表达式菜鸟教程 正则表达式菜鸟教程 1开山篇教程 正则表达式 - 教程 正则表达式(Regular Expression)是一种文本模式,包括普通字符 (例如,a 到 z 之间的字母) 和特殊字符 ...
- 正则表达式教程手册、正则一点通(Chinar出品)
C#语法之正则 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新! ...
- Python 正则表达式应用总结,如何找出全部匹配文本
文章目录 正则表达式介绍 一.正则表达式语法规则 二.Python中应用正则表达式 1.导入re标准库 2.如何找到所有匹配正则表达式的文本? Python re模块常用的几种正则表达式方式 总结 正 ...
- JS内置引用类型/内置对象
JS内置引用类型/内置对象 概述 对象在 JavaScript 中被称为引用类型的值/实例,在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称 ...
- 菜鸟教程python正则表达式_Python正则表达式常用函数菜鸟教程
这篇文章主要为大家详细介绍了Python正则表达式常用函数菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! Py ...
- 菜鸟教程python正则表达式_python 正则表达式详解
python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...
- java正则表达式的菜鸟使用分析
学习这个东西,菜鸟主要参考的是这两篇文章:Java正则多字符串匹配替换(网址:http://www.jb51.net/article/34154.htm).学习正则表达式:Matcher类(网址:ht ...
- Python正则表达式简单说明(菜鸟教程里面的说明)
摘自菜鸟教程 ::大家可以去看一下 挺有用的 正则表达式--可选标志含义 re.match()::匹配开头 re.search()::全部匹配 源自:http://www.runoob.com/pyt ...
- 菜鸟python 正则表达式_python基础知识(进阶篇--正则表达式)
含义:检查一个字符串是否与某种模式匹配,由re模块提供. re.match() re.match(匹配的正则表达式,要匹配的字符串,标志位) //尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹 ...
最新文章
- MySQL:left join 避坑指南
- 一文解析激光雷达中时序融合的研究现状和发展方向
- 数据库系统(四)——触发器
- SAP Data Intelligence Modeler的一些使用截图
- sparksql保存数据常见操作
- 开发代码code中变量替换
- 【Elasticsearch】 Elasticsearch中数据是如何存储的
- 2021全国大学生电子设计竞赛论文(智能送药小车(F题))(电赛论文模板)
- 一种依靠压缩电磁铁制造暗物质虫洞的机器
- word转html分页符,Word分页符、分栏符、换行符、分节符的作用
- Redis Cluster 原生搭建(二)meet
- Kik CEO Ted Livingston发博称要成为西方的微信?
- Java Fx 使用详解
- 0x000000f怎么修复 win10_win10系统开机蓝屏错误代码0xc000000f怎么解决
- decorators 参数_Django中decorators装饰器的使用
- 灵魂发问!线程池到底创建多少线程比较合理?
- 作为程序员要多注意身体(华佗教你睡觉)
- 嵌入式编程技巧(持续更新)
- 前端学习笔记之——初探HTML5
- C 与 C++ 的 static 关键字全解