正则表达式是一门灵活性非常强的语言,匹配同样的字符串可能在不同的开发人员那里会得到不同的结果,在平常的时候也是用的时候看看相关资料,不用的时候就丢在脑后了,尽管在处理大部分情况下都能迅速处理,但是处理一些复杂的情况效率仍是不高,借着前阵子做过的一个项目涉及到正则表达式的机会,将有关资料阅读了一遍并结合了自己的体会,整理了几篇利用 C# 进行正则表达式编程的文章,一来加深自己的印象和理解,二来供博客上的读者学习借鉴。

在 .NET 中提供了对正则表达式的支持,并且提供了相关的类,分别有: Regex 、 Match 、 Group 、 Capture 、 RegexOptions 、 MatchCollection 、 GroupCollection 、 CaptureCollection 。它们之间的关联如下:

对它们描述如下:

Regex

:正则表达式类,代表了一个不可变的正则表达式。

Match

:代表了
Regex

类的实例的一次匹配结果,可以通过
Regex

的
Match()

实例方法返回一个
Match

的实例。

MatchCollection

:代表了
Regex

类的实例的所有匹配结果,可以通过
Regex

的
Matches()

实例方法返回一个
MatchCollection

的实例。

Group

:表示单个捕获组的结果。由于一次匹配可能包含
0

个、
1

个或多个分组,所以
Match

的实例中返回的是捕获组集合的结果,即
GroupCollection

。

GroupCollection

:表示单个匹配中的多个捕获组的集合,可以通过
Match

的
Groups

实例属性返回
GroupCollection

的实例。

Capture

:表示单个捕获中的一个子字符串。同
Group

一样,由于一个捕获中可能包含
0

个、
1

个或多个子字符串,所以
Group

的实例中返回的是子字符串集合的结果,即
CaptureCollection

。

CaptureCollection

:默认表示按照从里到外、从左到右的顺序由捕获组匹配到的所有子字符串集合,可以通过
Group

或者
Match

的
Captures

实例属性返回
CaptureCollection

的实例。注意,可以使用
RegexOptions.RightToLeft

来改变这种匹配顺序。

RegexOptions

:提供用于设置正则表达式选项的枚举值。

像上面提到的
RightToLeft

就是它的一个枚举值之一,除此之外还有
None

、
IgnoreCase

、
Multiline

、
ExplicitCapture

、
Compiled

、
Singleline

、
IgnorePatternWhitespace

、
RightToLeft

、
ECMAScript

及
CultureInvariant

。
RegexOptions

枚举值可以相加,比如我们想匹配不区分大小写的字符串“
abc

”并且还想提高一下执行速度,那么可以写如下代码:

RegexOptions options=RegexOptions.IgnoreCase|RegexOptions.Compiled;

Regex regex=new Regex("abc",options);

Regex

、
Match

、
Group

及
Capture

的关系及成员

从上图可以看出
Regex

类提供了许多静态方法,很多方法还提供了多种重载方式(在图中对存在多种参数重载的方法都以“
...

”表示),除此之外我们还会发现
Capture

、
Group

及
Match

之间存在继承关系(说实在话刚开始用的时候我发现它们之间存在着很多相同的字段,这让我当时迷惑不已,希望大家看到这个图后不要再像我当初那样迷惑了)。

在使用
C#

中的正则表达式进行文本处理之前先花点时间了解一下
.NET

中有关正则表达式的类和它们之间的关系是有必要的,这篇就算是预热篇了,在开始学习正则表达式之前做做热身运动。虽然在
C#

中有关正则表达式的类不多,但是对于初学者来说还是容易引起混淆,从而出现不知道该用哪些类的哪些方法或者属性的情况,这篇算是做个初步介绍吧。下一篇就先讲述
Regex

类,利用
Regex

可以用来替换、分割和处理字符串。

C#正则表达式编程(一):C#中有关正则的类的更多相关文章

  1. C#中的正则 Regex类

    转义符的总结: 开始数 …………………………………………………………. 3 )Regex.matches() 提取所有符合要求的字符串 string str=@"绩大于80,则奖励50元.语 ...

  2. 【归纳】正则表达式及Python中的正则库

    正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...

  3. 正则表达式学习与python中的应用

    目录: 一.正则表达式的特殊符号 二.几种重要的正则表达式 三.python的re模块应用 四.参考文献 一.正则表达式的特殊符号 特殊符号可以说是正则表达式的关键,掌握并且可以灵活运用重要的pyth ...

  4. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  5. java中关于正则一些基础使用

    希望能帮到有需要的朋友.-----转载请注明出处. 对于正则处理相关的知识,我一开始是从网上找资料配合使用Java API1.6的一个中文版进行学习,很感谢翻译这个版本的团队(机构)或者个人,很感谢那 ...

  6. java中的正则操作总结

    http://www.cnblogs.com/nerxious/archive/2013/01/03/2842910.html 正则表达式在处理字符串的效率上是相当高的 关于正则表达式的使用,更多的是 ...

  7. javascript和php中的正则

    正则: var subStr=str.replace(reg/str,'');   不改变原来的字符串返回替换后的字符窜; 如果不用正则,只能替换第一个匹配到的; var subStr=str.mat ...

  8. ASP.NET中 RegularExpressValidator(正则验证)的使用

    原文:ASP.NET中 RegularExpressValidator(正则验证)的使用 ylbtech-ASP.NET-Control-Validator: RegularExpressValida ...

  9. JS中的正则应用

    如果还未掌握正则基础知识可先看另一篇:正则笔记-忘记就来看 创建方法: 直接量语法:/pattern/attributes 创建 RegExp 对象的语法:new RegExp(pattern, at ...

随机推荐

  1. ASP.NET MVC下的四种验证编程方式[续篇]【转】

    在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...

  2. html5 canvas 笔记一(基本用法与绘制图形)

    <canvas> 元素 <canvas id="tutorial" width="150" height="150"> ...

  3. How to create UrlSlug in Asp.Net MVC

    转自:http://www.ehsanghanbari.com/Post/20/how-to-create-urlslug-in-aspnet-mvc UrlSlug Is a way of gene ...

  4. 【Pro ASP.NET MVC 3 Framework】.学习笔记.10.SportsStore:上传图片

    1 扩展数据库 打开表定义,新增两列可空 ) 2 增强领域模型 为Products类添加如下属性 publicstring ImageMimeType { get; set; } 第一个属性不会在界面 ...

  5. umask:遮罩码

    查看umask:umask 创建文件:-umask 文件默认不能具有执行权限 创建目录:-umask 设置umask:umask 0022 生效访范围:当前shell

  6. eclipse怎么设置字体大小

    eclipse怎么设置字体大小

  7. oracle-odu小试牛刀--恢复drop表的数据

         现在进入oracle12c时代:普遍用的oracle版本为10g以上.在oracle10g之后提供了一个回收的机制.所以恢复drop表的数据以及表很容易.当然需要打开回收机制以及是归档模式. ...

  8. okhttp封装

    对这玩意并不熟,网上有很多大神封装好的,但是懒得看里面的封装逻辑,索性自己简单做个封装,方便使用,出现bug也好查找: get请求: /** * get请求 * @param url * @param ...

  9. Webstrom快捷键大全

    20:32:59 Ctrl+/ 或 Ctrl+Shift+/          注释(// 或者 ) Shift+F6               重构-重命名 Ctrl+X             ...

  10. androidactivity与webview结合

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...