C#正则表达式Regex类使用
作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎。本人使用perl语言处理文本有一些时间,同时也有几年php开发的经历,像php就有兼容perl的正则表达式引擎,其对应的正则表达式函数就是以p为前缀,如preg_replace、preg_match、preg_split。.NET 类库当然也提供了正则表达式的支持,位于System.Text.RegularExpressions命名空间下的Regex类封装了所有正则表达式的属性和使用方法。本文以C#语言详细叙述一下.NET类库下的这个Regex类,可以发现所有的语言对正则表达式的支持都是万变不离其宗,以类比推理的方式学习非常好。
使用过正则表达式的朋友都知道,正则表达式就是指定一个规则去处理一些复杂的文本(如果是简单的处理可以使用一般语言内置的字符串处理函数就可以了,而且效率会更好)。这样需要达到的效果无非就是用一个模式去替换字符串中的特定项为另一特定项、用一个模式去匹配文本中感兴趣的部分内容、用一个特殊的模式去拆分文本。
- 构造函数:用于构造一个正则表达式对象,源码的声明如下:
- 匹配(Match):使用模式进行匹配的时候,.NET提供了IsMatch和Match以及Matches三个函数,第一个返回布尔值用来表示是否匹配成功,第二个则是返回匹配得到的结果Match对象,包含了匹配的结果内容,第三个则是返回一个Match对象的集合,包含了所有匹配的对象。上述函数的所有声明如下:
string text = @"12345qwert";
if (Regex.IsMatch(text, @"[\d]+"))
{
Console.WriteLine("success");
}
else
{
Console.WriteLine("fail");
}
Match函数也是同样的提供了输入字符串匹配,和指定起始位置开始匹配,或者同事指定匹配长度。对应的静态版本类似。匹配成功返回的是一个Match对象,包含了如下信息:包含的匹配信息Capture、匹配得到的对应的分组信息Group,Capture包含了匹配得到的字符串Value、长度Length和在源字符串中的起始位置Index,Group则拥有组名称、是否成功Success,同时Match对象包含了NextMatch属性用于只想下一个匹配得到的Match对象(如果有多个匹配成功项的话),还有Result方法用一个字符串去替换当前匹配到的字符串。Match函数仅返回匹配到的第一个分组,也就是分组0,整个正则表达式匹配到的整体。
string text = @"12345qwert67890";
Regex rg = new Regex( @"(?<first>[\d])\d+");
if (rg.IsMatch(text,0))
{
MatchCollection mts = rg.Matches(text,0);
foreach(Match mt in mts )
{
Console.WriteLine("success:" + mt.Value);
}
}
else
{
Console.WriteLine("fail");
}
- 替换(Replace):其实在Match函数中也提供了Result方法用来替换匹配项,但是功能不够充分,以下是Regex类中的替换方法:
- 分割(Split):分割为找到匹配项后以此阶段源字符串,返回字符数组。定义如下:
string text = @"12345qwert67890";
Regex rg = new Regex( @"(?<first>[\d])\d+");
string [] strArr = rg.Split(text,10);
foreach(string str in strArr )
{
Console.WriteLine("success:{0}", str);
}
从上述图中结果可以看出,对于有分组的时候,是按照源字符串中的位置顺序进行匹配都进行拆分。
C#正则表达式Regex类使用的更多相关文章
- C#正则表达式Regex类的用法
C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:36891 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...
- C#正则表达式Regex类
C#正则表达式Regex类的使用 C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间 ...
- C#正则表达式Regex类的介绍
一.在C#中,要使用正则表达式类,请在源文件开头处添加以下语句: using System.Text.RegularExpressions; 二.RegEx类常用的方法 1.静态Match方法 使用静 ...
- C#正则表达式Regex类的使用
C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间所在DLL基本上在所有的项目模板中 ...
- (转)C#正则表达式Regex类的用法
原文地址如下:http://www.studyofnet.com/news/297.html 一.C#正则表达式符号模式 字 符 描 述 \ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反 ...
- 用Regex类计算一个字符串出现次数是最好方法【转载】
我的一个朋友问我,怎么在c#或vb.net中,计算一个字符串中查找另一个字符串中出现的次数,他说在网上打了好多方法,我看了一下,有的是用replace的方法去实现,这种方法不是太好,占资源太大了.其实 ...
- C#正则表达式编程(二):Regex类用法
上一篇讲述了在C#中有关正则表达式的类之间的关系,以及它们的方法,这一篇主要是将Regex这个类的用法的,关于Match及MatchCollection类会在下一篇讲到.对于正则表达式的应用,基本上可 ...
- C#正则表达式Regex常用匹配
使用Regex类需要引用命名空间:using System.Text.RegularExpressions; 利用Regex类实现验证 示例1:注释的代码所起的作用是相同的,不过一个是静态方法,一个是 ...
- 关于C#正则表达式MatchCollection类的总结,正则表达式的应用
认识MatchCollection 类 表示通过以迭代方式将正则表达式模式应用于输入字符串所找到的成功匹配的集合. 命名空间: System.Text.RegularExpressions 属性:C ...
随机推荐
- apache+php配置中遇到的问题
在安装apache+php配置中遇到的问题: LoadModule php5_module "D:/PHP/php5apache2_4.dll"PHPIniDir "D: ...
- Eclipse使用新手教程
说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者仅仅是针对刚刚入门java的新手 ...
- cocos2dx3.1.1+cocosstudio+lua问题总结
一.DeprecatedEnum.lua no value _G.LAYOUT_ABSOLUTE = ccui.Type.ABSOLUTE _G.LAYOUT_LINE ...
- google perftools分析程序性能
Google perftools 1.功能简介 它的主要功能就是通过采样的方式,给程序中cpu的使用情况进行“画像”,通过它所输出的结果,我们可以对程序中各个函数(得到函数之间的调用关系)耗时情况一目 ...
- 读写应用程序数据-CoreData
coreData数据最终的存储类型可以是:SQLite数据库.XML.二进制.内存里.自定义的数据类型. 和SQLite区别:只能取出整个实体记录,然后分解,之后才能得到实体的某个属性. 1.创建工程 ...
- Cookie中的三个容器request,session,application的设置和获取
public class SaveServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpSer ...
- Android Activiy的作用
在Android应用程序中 ,Activity主要的负责创建窗口的,一个Activicy就是代表一个单独的屏幕,并且是用户唯一可以看到的东西 也就是说Activity就是用来实现和用户交互的,就和.n ...
- Android源码解析--Quick Search in Settings
欢迎大家加入群里交流:429664282 基于:android-6.0.1_r17 f4b8ad6 Android Settings中存在一个SearchIndexablesProvider,它提供了 ...
- Hessian
一.远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . udp 等等, http . ...
- WCF学习系列一_创建第一个WCF服务
原创作者:灰灰虫的家http://hi.baidu.com/grayworm WCF开发实战系列一:创建第一个WCF服务 在这个实战中我们将使用DataContract,ServiceContract ...