• 数据结构 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的用法还有很多。下面将来看看更加复杂的用法。

    小洋,燕洋天
  • 相关阅读:
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    第六次作业
    福大软工1816 · 第五次作业
    福大软工1816 · 第四次作业
    福大软工1816 · 第三次作业
    福大软工1816 · 第二次作业
    软工实践-团队现场编程
    qwe
    软工冲刺-Alpha 冲刺 (3/10)
    软工时间-Alpha 冲刺 (2/10)
  • 原文地址:https://www.cnblogs.com/yanyangtian/p/1263548.html
Copyright © 2020-2023  润新知