C#中的正则表达式对象[转载]

C# 中, .NET 为我们提供了一个 System.Text.RegularExpression 命名空间,包含了一些我们常用的操作和运用 RegularExpression 的对象,属性和方法。其中相当重要的有 Regex,Match,Group,Capture 等对象。
         我们可以来看看这些对象之间有什么联系和区别,并学习在实际中运用它们。
 
说明
表示单个子表达式捕获中的结果。 Capture 表示单个成功捕获中的一个子字符串。
表示一个捕获子字符串序列。 CaptureCollection 返回由单个捕获组执行的捕获的集合。
Group 表示单个捕获组的结果。由于存在数量词,一个捕获组可以在单个匹配中捕获零个、一个或更多的字符串,因此 Group 提供 Capture 对象的集合。
表示捕获组的集合。 GroupCollection 返回单个匹配中的捕获组的集合。
表示单个正则表达式匹配的结果。
表示通过以迭代方式将正则表达式模式应用于输入字符串所找到的成功匹配的集合。
表示不可变的正则表达式。
提供编译器用于将正则表达式编译为独立程序集的信息。
 
首先我们接触到的就是 Regex 对象, 表示不可变的正则表达式。另外 Regex 类包含若干静态方法,使您无需显式创建 Regex 对象即可使用正则表达式。使用静态方法等效于构造 Regex 对象,使用该对象一次然后将其销毁。
例如:
我们可以通过 Regex 的构造函数创建对象:
Regex objRegex = new Regex();
或者通过静态方法直接运用:
string strTarget= "123abc456def789g";
                   string strRegex = @"/d+";
    Console.WriteLine((System.Text.RegularExpressions.Regex.Matches(strTarget,strRegex)).Count);    
         以上就是直接通过静态方法的实例。
 
         运用 RegularExpression 就不可能不涉及到匹配。 Match 表示单个正则表达式匹配的结果。这一点不用解释,以
string strTarget= "123abc456def789g";
                   string strRegex = @"/d+";
    Console.WriteLine((System.Text.RegularExpressions.Regex.Matches(strTarget,strRegex)).Count);    
为例,一个 Match 可能就是 123
 
         由于单个匹配可能涉及多个捕获组,因此 Match 具有返回 GroupCollection Groups 属性。 GroupCollection 具有返回每个组的访问器。 Match Group 继承,因此可以直接访问匹配的整个子字符串。 Match 实例本身等效于 Match.Groups[0] (在 Visual Basic 中为 Match.Groups(0) )。 Match 对象是不可变的,并且没有公共构造函数。
         这里衍生出一个新的对象 ----Group Group 表示单个捕获组的结果。在 C# RegularExpression 中用圆括号括起来表示一个捕获组。看例子:
string strTarget= "123abc456def789g";
string strRegex1 = @"/d+([a-z])+";
Console.WriteLine(Regex.Match(strTarget,strRegex,RegexOptions.IgnoreCase).Groups.Count);
这里用( [a-z] )来捕获单个英文字符。这就是一个捕获组。所以这里 Groups Count 就是 2 个, Groups[0] 等效于 Match 实例本身。 Groups[1] ’C’
由于存在数量词,一个捕获组可以在单个匹配中捕获零个、一个或更多的字符串,因此 Group 提供 Capture 对象的集合。
Capture ,顾名思义,就是一次捕获,还是以上面的正则表达式例子:
Console.WriteLine(Regex.Match(strTarget,strRegex1,RegexOptions.IgnoreCase).Groups[1].Captures.Count);
通过输出我们可以看见有 3 Capture ,如果我们都打印出来会发现分别是 a,b,c Groups[1] 保留了最后一次捕获。
至此,我们可以大概了解了。这些常用对象。
至于如何运用,还是要视具体情况,正则表达式主要用以处理文本,如果机会合适还是可以节约很多工作量的,推荐大家使用。
也欢迎大家就这方面继续深入和我讨论。
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=845761

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值