您的位置:首页 > 理论基础 > 数据结构算法

数据结构 C#描述 第八章 前篇

2008-08-08 11:03 218 查看
模式匹配和文本处理-正则表达式

尽管String和StringBuilder类提供了一系列的操作字符串的方法,但是RegEx为字符串的处理提供了更强大的能力。字符串的 很多时候多涉及到串的匹配,而这中操作是用另外一种语言来提供的――正则表达式。本章中,我们将看见怎样用正则表达式以及用他来解决文本处理的问题。

正则表达式介绍

正则表达式是一种描述串中字符匹配的语言,描述了字符的重复的次数,是否可选,以及可以包含哪些字符等等。正则表达式还可以用来在串中截取和查找字符。

其实正则表达式本身也只是一个串,只不过这个串是你定义来查找其他串的串

一个正则表达式包含一些特殊的字符,称之为“通配符”。通配符用来标明重复,可选,或者分组。

很多有经验的计算机用户已经会在他们的工作中用正则表达式,即使他们还没有意识到他们在用。,比如,有时候在命令行输入:

C:">dir myfile.exe

“myfile.exe”就是一个正则表达式。这个表达式被传入dir命令中,之后,任何在C盘中的以myfile.exe的文件都显示出来了。

很多用户也用到下面的命令:

C:">dir *.cs

之后,就会把C盘中的所有的后缀名为.cs的文件都显示出来。

上面的正则表达式就包含了一个通配符。“*.cs“是一个正则表达式,而”*”就是一个通配符,意味这零个或者多个,而余下的“.cs”只普通的文件后缀名。整个正则表达式的意思就是”找出C中的所有以cs结尾的文件“。

当然,还有很多更加强大的正则表达式。现在让我们来看看在C#中的正则表达式。

纵观正则表达式的使用

说到正则表达式,我们将会介绍RegEx类的使用。这个类在 System.Text.RegularExpression名称空间下。

一旦我们将这个类引用到我们的程序中,,我们就要考虑怎样使用类。如果想要执行匹配,我们将会用到Match类。如果想截取字符,那就要用Replace方法。

让我们以一个匹配字符串的例子开始。给了一个字符串“the quick brow fox jumped over the lazy dog“。我们想找出” the“.。代码如下:

using System;

using System.Text.RegularExpressions;

public class Chapter8

{

static void Main()

{

Regex reg = new Regex("the");

string str1 = "the quick brown fox jumped over the lazy dog";

Match matchSet;

int matchPos;

matchSet = reg.Match(str1);

if (matchSet.Success)

{

matchPos = matchSet.Index;

Console.WriteLine("found match at position: " + matchPos);

}

}

}

首先我们创建了一个Regex独享,并且在构造器中传入我们想要匹配其他串的正则表达式。然后,我们在创建一个字符串str1。也申明一个Match类,matchSet。Match类提供了保存被匹配串str1的方法。

然后在if语句中用到了Match类的Success属性,来说明,如果匹配成功将怎样。

Match类的一个问题就是:它只执行一次匹配。如,在之前的代码中,str1有两个”the“,当是结果返回的是0,即只是执行了一次匹配,返回第一个“the”

的位置。我们可以用另外的一个类Matches,来保存和执行多次匹配。我们将匹配的结果保存在MatchCollection对象中。代码如下:

using System;

using System.Text.RegularExpressions;

public class Chapter8

{

static void Main()

{

Regex reg = new Regex("the");

string str1 = "the quick brown fox jumped over the lazy dog";

MatchCollection matchSet;

matchSet = reg.Matches(str1);

if (matchSet.Count>0)

{

foreach(Match aMatch in matchSet )

Console.WriteLine("found match a mactch at: " + aMatch.Index);

}

Console.Read();

}

}

结果输入:

found match a mactch at: 0

found match a mactch at: 32

下面我们将看看怎样用Replace方法来用一个串替换另外的串。Replace方法是一类的方法,即,是一个静态的方法。方法要传入三个参数:目标串(要被替换的那个串),被替换的那些字符,替换的字符。。还是看看代码:

string s = "the quick brown fox jumped over the brown

dog";

s = Regex.Replace(s, "brown", "black");

结果是:“the quick black fox jumped over the black dog”.

关于Regex的用法还有很多。下面将来看看更加复杂的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: