您的位置: 网站首页 > 程序开发 > C#程序设计 > 第3章 字符串操作 > 【3.3 使用正则表达式】

3.3 使用正则表达式

 

3.3  使用正则表达式

正则表达式的出现主要用于解决字符串匹配问题,C#中为正则表达式提供了良好的支持。本节介绍正则表达式的相关内容。

3.3.1  正则表达式简介

与传统的简单字符串搜索方式不同,正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法,使得快速分析大量文本以找到特定的字符模式成为可能。另外,正则表达式还可以用于提取、编辑、替换或删除文本子字符串,或者将提取的字符串添加到集合以生成报告。对于处理字符串的许多应用程序而言,正则表达式是不可缺少的工具。

正则表达式的内容十分丰富,此处仅介绍一些常用的语法和使用。

1.转义字符

一般字符:除.$ ^ { [ ( | ) * + ? \ 外,其他字符与自身对应。

·    \a:与响铃(警报)\u0007对应。

·    \b:与退格符\u0008对应。

·    \t:与Tab\u0009对应。

·    \r:与回车符\u000D对应。

·    \v:与垂直Tab\u000B对应。

·    \f:与换页符\u000C对应。

·    \n:与换行符\u000A对应。

·    \e:与Esc\u001B对应。

2.字符

·    .:对应除“\n”以外的任何字符。

·    [aeiou]:与指定字符集中包含的任何单个字符对应,即与“a”、“e”、“i”、“o”和“u”中的任意一个对应。

·    [^ aeiou]:与不在指定字符集中的任何单个字符对应,即与除“a”、“e”、“i”、“o”和“u”之外的字符对应。

·    [0-9a-fA-F]:使用连字符“-”允许指定连续字符范围。此处为数字09,小写字母a到小写字母f,大写字母A到大写字母F中的任何一个对应。

·    \w:与任何单词字符对应。

·    \W:与任何非单词字符对应。

·    \s:与任何空白字符对应。

·    \S:与任何非空白字符对应。

·    \d:与任何十进制数字对应。

·    \D:与任何非数字对应。

3.次数限定

·    *:指定0个或多个对应,例如“\w*”或(abc*

·    +:指定1个或多个对应,例如“\w+”或(abc+

·    ?:指定0个或1个对应,例如“\w?”或(abc?

·    {n}:指定恰好n个对应。

·    {n ,}:指定至少n个对应。

·    {n ,m}:指定至少n个但不多于m个对应。

·    *?:指定尽可能少地使用重复的第一个对应。

·    +?:指定尽可能少地使用重复但至少使用一次。

·    ??:指定使用0次重复或一次重复。

·    {n}?:等效于{n}

·    {n ,}?:指定尽可能少地使用重复但至少使用n次。

·    {n ,m}?:指定介于n次和m次之间、尽可能少地使用重复。

3.3.2  使用Regex

使用正则表达式时,必须引用using System.Text.RegularExpressions命名空间。在该命名空间下有许多与正则表达式使用相关的内容,这里仅介绍几个常用的类。

1Regex类。表示不可变(只读)正则表达式类,可以再用其声明一个正则表达式。下面的代码示例演示了Regex类型变量的声明方法:

// 声明一个Regex.变量

Regex r;

// 初始化,并用正则表达式初始化

r = new Regex("[a, e, i, o, u]");

2Match类。Match类表示正则表达式匹配操作的结果,是正则表达式使用中最基本的类。下面的实例使用Regex类的Match方法返回Match类型的对象,以便找到输入字符串中的第一个匹配项。此实例使用Match类的Match.Success属性来指示是否已找到匹配。

1.目的说明

创建一个Windows控制台应用程序,演示Match类的使用方法。

2.实现步骤

1)创建一个名为RegexMatch的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    // 创建Regex对象

    Regex r = new Regex("o");

 

    // 在给定字符串中搜索“o

    Match m = r.Match("Thank You");

 

    // 判断是否成功并输出

    if (m.Success)

    {

        Console.WriteLine("搜索o成功!");

        Console.WriteLine("位于:" + m.Index);

    }

    else

    {

        Console.WriteLine("未找到该字符串!");

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图3-17所示。

4.代码分析

从运行结果可以看到,Match类匹配到了字符串“Thank You”中的字符“o”。如果在字符串“Thank You”中匹配字符“x”,将得到如图3-18所示的运行结果2

        

3-17  运行结果1                               3-18  运行结果2

3.3.3  常用正则表达式

下面给出一些常用的正则表达式,供读者学习或编程时使用。

·    [\u4e00-\u9fa5]:对应中文字符。

·    [^\x00-\xff]:对应双字节字符(包括汉字在内)。

·    \n[\s| ]*\r:对应空行。

·    /<(.*)>.*<\/\1>|<(.*) \/>/:对应HTML标记。

·    (^\s*)|(\s*$):对应首尾空格。

·    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*:对应E-mail地址。

·    http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?:对应http网址URL

3.3.4  验证电子邮箱地址

下面介绍一个实例,演示通过正则表达式验证电子邮箱地址的方法。

1.目的说明

创建一个Windows控制台应用程序,演示通过正则表达式验证电子邮箱地址的方法。

2.实现步骤

1)创建一个名为StrBuilderCompare的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    //定义用于获取E-mail的正则表达式

    Regex r = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");

 

    //给字符串a赋值

    string a = "thank you wang wang@web.com";

    // 在给定字符串a中搜索电子邮件地址

    Match m = r.Match(a);

    //判断是否成功并输出

    if (m.Success)

    {

        Console.WriteLine("搜索到电子邮件地址:");

        Console.WriteLine("位于:" + m.Index);

    }

    else

    {

        Console.WriteLine("未找到该字符串!");

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图3-19所示。

4.代码分析

可以看到,通过正则表达式找到了字符串a中的电子邮箱地址“wang@web.com”的位置。将字符串a设置为“thank you wang wang web.com”,再次运行程序,其运行结果如图3-20所示。

         

3-19  运行结果1                                3-20  运行结果2

运行结果说明字符串a中不包含合法的电子邮箱地址。