• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#中的正则表达式介绍

C#中的正则表达式介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c站,c语言,欲情 c max,奔驰c200,85度c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

正则表达式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。
1、正则表达式简介

正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。对于处理字符串(例如 HTML处理、日志文件分析和 HTTP 标头分析)的许多应用程序而言,正则表达式是不可缺少的工具。

.NET 框架正则表达式并入了其他正则表达式实现的最常见功能,被设计为与 Perl 5 正则表达式兼容,.NET 框架正则表达式还包括一些在其他实现中尚未提供的功能,.NET 框架正则表达式类是基类库的一部分,并且可以和面向公共语言运行库的任何语言或工具一起使用。

2、字符串搜索

正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。正是元字符组为正则表达式提供了处理能力。当前,所有的文本编辑器都有一些搜索功能,通常可以打开一个对话框,在其中的一个文本框中键入要定位的字符串,如果还要同时进行替换操作,可以键入一个替换字符串,比如在Windows操作系统中的记事本、Office系列中的文档编辑器都有这种功能。

这种搜索最简单的方式,这类问题很容易用String类的String.Replace()方法来解决,但如果需要在文档中识别某个重复的,该怎么办?

编写一个例程,从一个String类中选择重复的字是比较复杂的,此时使用语言就很适合。

一般表达式语言是一种可以编写搜索表达式的语言。在该语言中,可以把文档中要搜索的文本、转义序列和特定含义的其他字符组合在一起,例如序列b表示一个字的开头和结尾(子的边界),如果要表示正在查找的以字符th开头的字,就可以编写一般表达式bth(即序列字符界是-t-h)。如果要搜索所有以th结尾的字,就可以编写thb(序列t-h-字边界)。但是,一般表达式要比这复杂得多,例如,可以在搜索操作中找到存储部分文本的工具性程序(facility)。

3、.NET 框架的正则表达式类

下面通过介绍 .NET 框架的正则表达式类,熟悉一下.NET框架下的正则表达式的使用方法。

3.1 Regex 类表示只读正则表达式

Regex 类包含各种静态方法,允许在不显式实例化其他类的对象的情况下使用其他正则表达式类。以下代码示例创建了 Regex 类的实例并在初始化对象时定义一个简单的正则表达式。请注意,使用了附加的反斜杠作为转义字符,它将 s 匹配字符类中的反斜杠指定为原义字符。

Regex r; // 声明一个 Regex类的变量 
r = new Regex("\s2000"); // 定义表达式 
</div>

3.2 Match 类表示正则表达式匹配操作的结果

以下示例使用 Regex 类的 Match 方法返回 Match 类型的对象,以便找到输入字符串中第一个匹配。此示例使用 Match 类的 Match.Success 属性来指示是否已找到匹配。

Regex r = new Regex("abc"); // 定义一个Regex对象实例 
Match m = r.Match("123abc456"); // 在字符串中匹配 
if (m.Success) 
{ 
Console.WriteLine("Found match at position " + m.Index); //输入匹配字符的位置 
} 
</div>

3.3 MatchCollection 类表示非重叠匹配的序列

该集合为只读的,并且没有公共构造函数。MatchCollection 的实例是由 Regex.Matches 属性返回的。使用 Regex 类的 Matches 方法,通过在输入字符串中找到的所有匹配填充 MatchCollection。下面代码示例演示了如何将集合复制到一个字符串数组(保留每一匹配)和一个整数数组(指示每一匹配的位置)中。

MatchCollection mc; 
String[] results = new String[20]; 
int[] matchposition = new int[20]; 
Regex r = new Regex("abc"); //定义一个Regex对象实例 
mc = r.Matches("123abc4abcd"); 
for (int i = 0; i < mc.Count; i++) //在输入字符串中找到所有匹配 
{ 
results = mc.Value; //将匹配的字符串添在字符串数组中 
matchposition = mc.Index; //记录匹配字符的位置 
} 
</div>

3.4 GroupCollection 类表示捕获的组的集合

该集合为只读的,并且没有公共构造函数。GroupCollection 的实例在 Match.Groups 属性返回的集合中返回。下面的控制台应用程序查找并输出由正则表达式捕获的组的数目。

using System; 
using System.Text.RegularExpressions; 
public class RegexTest 
{ 
public static void RunTest() 
{ 
Regex r = new Regex("(a(b))c"); //定义组 
Match m = r.Match("abdabc"); 
Console.WriteLine("Number of groups found = " + m.Groups.Count); 
} 
public static void Main() 
{ 
RunTest(); 
} 
} 
</div>

该示例产生下面的输出:

Number of groups found = 3

3.5 CaptureCollection 类表示捕获的子字符串的序列

由于限定符,捕获组可以在单个匹配中捕获多个字符串。Captures属性(CaptureCollection 类的对象)是作为 Match 和 group 类的成员提供的,以便于对捕获的子字符串的集合的访问。例如,如果使用正则表达式 ((a(b))c)+(其中 + 限定符指定一个或多个匹配)从字符串"abcabcabc"中捕获匹配,则子字符串的每一匹配的 Group 的 CaptureCollection 将包含三个成员。

下面的程序使用正则表达式 (Abc)+来查找字符串"XYZAbcAbcAbcXYZAbcAb"中的一个或多个匹配,阐释了使用 Captures 属性来返回多组捕获的子字符串。

using System; 
using System.Text.RegularExpressions; 
public class RegexTest 
{ 
public static void RunTest() 
{ 
int counter; 
Match m; 
CaptureCollection cc; 
GroupCollection gc; 
Regex r = new Regex("(Abc)+"); //查找"Abc" 
m = r.Match("XYZAbcAbcAbcXYZAbcAb"); //设定要查找的字符串 
gc = m.Groups; 
//输出查找组的数目 
Console.WriteLine("Captured groups = " + gc.Count.ToString()); 
// Loop through each group. 
for (int i=0; i < gc.Count; i++) //查找每一个组 
{ 
cc = gc.Captures; 
counter = cc.Count; 
Console.WriteLine("Captures count = " + counter.ToString()); 
for (int ii = 0; ii < counter; ii++) 
{ 
// Print capture and position. 
Console.WriteLine(cc[ii] + " Starts at character " + 
cc[ii].Index); //输入捕获位置 
} 
} 
} 
public static void Main() { 
RunTest(); 
} 
} 
</div>

此例返回下面的输出结果:

Captured groups = 2 
Captures count = 1 
AbcAbcAbc Starts at character 3 
Captures count = 3 
Abc Starts at character 3 
Abc Starts at character 6 
Abc Starts at character 9 
</div>

3.6 Capture 类包含来自单个子表达式捕获的结果

在 Group 集合中循环,从 Group 的每一成员中提取 Capture 集合,并且将变量 posn 和 length 分别分配给找到每一字符串的初始字符串中的字符位置,以及每一字符串的长度。

Regex r; 
Match m; 
CaptureCollection cc; 
int posn, length; 
r = new Regex("(abc)*"); 
m = r.Match("bcabcabc"); 
for (int i=0; m.Groups.Value != ""; i++) 
{ 
cc = m.Groups.Captures; 
for (int j = 0; j < cc.Count; j++) 
{ 
posn = cc[j].Index; //捕获对象位置 
length = cc[j].Length; //捕获对象长度 
} 
} 
</div>

把组合字符组合起来后,每次都会返回一个组对象,就可能并不是我们希望的结果。如果希望把组合字符作为搜索模式的一部分,就会有相当大的系统开销。对于单个的组,可以用以字符序列"?:"开头的组禁止这么做,就像URI样例那样。而对于所有的组,可以在RegEx.Matches()方法上指定RegExOptions.ExplicitCapture标志。

希望通过本文对正则表达式的介绍,能够给你带来帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C# 检索不区分大小写并高亮显示实例详解
  • C#实现Base64处理的加密解密,编码解码示例
  • C# SqlHelper应用开发学习
  • C#多线程经典示例(吃苹果)
  • C#使用Windows Service的简单教程(创建、安装、卸载、调试)
  • C# 6.0 的知识梳理
  • C#向PPT文档插入图片以及导出图片的实例
  • C#使用Jquery zTree实现树状结构显示 异步数据加载
  • C#清理非托管对象实例分析
  • C#双缓冲技术实例详解

相关文章

  • 2017-05-28C#算法函数:获取一个字符串中的最大长度的数字
  • 2017-05-28C#中out与ref的区别实例解析
  • 2017-05-28C#中float的取值范围和精度分析
  • 2017-05-28C#.Net ArrayList的使用方法
  • 2017-05-28C# Base64编码函数
  • 2017-05-28List转换成DataSet实现代码
  • 2017-05-28C#实现几十万级数据导出Excel及Excel各种操作实例
  • 2017-05-28.net的命名空间类库的简单介绍
  • 2017-05-28C#基于正则表达式实现获取网页中所有信息的网页抓取类实例
  • 2017-05-28C# DataGridView添加新行的2个方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现在图像中绘制文字图形的方法
    • C#中dynamic关键字的正确用法(推荐)
    • C#利用子线程刷新主线程分享教程
    • C#仿密保卡功能的简单实现代码
    • WinForm实现为TextBox设置水印文字功能
    • 超炫酷的WPF实现Loading控件效果
    • C#中ZipHelper 压缩和解压帮助类
    • c#栈变化规则图解示例(栈的生长与消亡)
    • 深入浅出23种设计模式
    • C# XML与Json之间相互转换实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有