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

                                   模式匹配和文本处理-正则表达式

       尽管StringStringBuilder类提供了一系列的操作字符串的方法,但是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的用法还有很多。下面将来看看更加复杂的用法。

posted @ 2008-08-08 11:03  小洋(燕洋天)  阅读(657)  评论(0编辑  收藏  举报