• [转]C#中正则表达式的应用


    最近有许多朋友问我正则表达式的问题,简单的说,正则表达式是一种搜索算法,也许你对使用*,?等通配符的使用一点不陌生,但有时候光靠通配符是远远不能满足我们搜索字符串的需求,因此就有人把正则表达式引入进来,下面将介绍在C#中如何应用正则表达式。

    C#中的正则表达式包含在.NET基础类库的一个名称空间下,这个名称空间就是System.Text.RegularExpressions。该名称空间包括8个类,1个枚举,1个委托。他们分别是:
                         Capture: 包含一次匹配的结果;
                         CaptureCollection: Capture的序列;
                         Group: 一次组记录的结果,由Capture继承而来;
                         GroupCollection:表示捕获组的集合
                         Match: 一次表达式的匹配结果,由Group继承而来;
                         MatchCollection: Match的一个序列;
                         MatchEvaluator: 执行替换操作时使用的委托;
                         Regex:编译后的表达式的实例。
                         RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息
                         RegexOptions 提供用于设置正则表达式的枚举值

    Regex类中还包含一些静态的方法:
                        Escape: 对字符串中的regex中的转义符进行转义;
                        IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值;
                        Match: 返回Match的实例;
                        Matches: 返回一系列的Match的方法;
                        Replace: 用替换字符串替换匹配的表达式;
                        Split: 返回一系列由表达式决定的字符串;
                        Unescape:不对字符串中的转义字符转义。

    这里不打算详细介绍这些方法,有兴趣的朋友,请阅读 ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconusingregularexpressionclasses.htm

    下面通过举几个例子来说明几种常用的正则表达式应用
            注意先引入空间:using System.Text.RegularExpressions;

      1)IsMatch,判断指定文本是否匹配给出的正则表达式,匹配的话返回true
              判断字符串是否为合法的E-Mail地址:

                    Regex emailRegex = new Regex("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
                    String myEmail = "tangzehuan@163.com";

                    if(emailRegex.IsMatch(myEmail))
                    {
                        Response.Write(myEmail + "是正确的邮箱地址");
                    }
                    else
                    {
                        Response.Write(myEmail + "不是正确的邮箱地址");               
                    }

                    输出结果为:
                   
    tangzehuan@163.com是正确的邮箱地址

        
    2)Replace,替换匹配的字符
              查找替换HTML标识符:

                    Regex fontRegex = new Regex("<font color=#000000>([^[<>]*)</font>");
                    String myHTML = "ab12cd<font color=#000000>akjdflkjas中文</font>efg<font color=#FF0000>测试文字<B>YYY中文<B></font>";
                   
                    myHTML = fontRegex.Replace(myHTML,"");

                    Response.Write(myHTML);

                 输出结果为:
                 ab12cdefg<font color=#FF0000>测试文字<B>YYY中文<B></font>
                 从结果已经看出,已经把<font color=#000000>akjdflkjas中文</font>这段HTML标识给替换掉了

        
    3)GroupCollection,查找带参数的正则表达式
                
              搜索学生资料中的学号:
                    Regex digitregex = new Regex("学号:(\\d+)");

                    String s = "姓名: tangcfzs  学号:36  成绩:67";
                    s += "\n姓名: tangzffs  学号:37  成绩:77";
                    s += "\n姓名: tangffrs  学号:38  成绩:87";
                    s += "\n姓名: tangfzhs  学号:39  成绩:86";
                   
                    Match m = digitregex.Match(s);

                    while (m.Success)
                    {
                        Group g = m.Groups[1];
                        Response.Write(g + "<br>");
                        m = m.NextMatch();
                    }

                     输出结果为:
                        36
                        37
                        38
                        39
          


    上面只是通过例子简单介绍了正则表达式的使用,其实最难的还是写正则表达式,一些常用的正则表达式请看http://www.cnblogs.com/zhangronghua/archive/2006/11/09/555038.html
  • 相关阅读:
    剑指offer字符串列表
    剑指offer数组3
    剑指offer数组2
    剑指offer数组1
    剑指offer数组列表
    tensorflow+ssd_mobilenet实现目标检测的训练
    Win7+keras+tensorflow使用YOLO-v3训练自己的数据集
    Java是如何实现跨平台的
    Xshell 、PuTTY 复制文件到Linux
    Asp.Net Core2.0在linux下发布
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/563637.html
Copyright © 2020-2023  润新知