在
C#
中,
.NET
为我们提供了一个
System.Text.RegularExpression
命名空间,包含了一些我们常用的操作和运用
RegularExpression
的对象,属性和方法。其中相当重要的有
Regex,Match,Group,Capture
等对象。
我们可以来看看这些对象之间有什么联系和区别,并学习在实际中运用它们。
类
|
说明
|
表示单个子表达式捕获中的结果。
Capture
表示单个成功捕获中的一个子字符串。
| |
表示一个捕获子字符串序列。
CaptureCollection
返回由单个捕获组执行的捕获的集合。
| |
表示捕获组的集合。
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);
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);
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);
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’
。
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