• C#正则表达式编程(一):C#中有关正则的类


    正则表达式是一门灵活性非常强的语言,匹配同样的字符串可能在不同的开发人员那里会得到不同的结果,在平常的时候也是用的时候看看相关资料,不用的时候就丢在脑后了,尽管在处理大部分情况下都能迅速处理,但是处理一些复杂的情况效率仍是不高,借着前阵子做过的一个项目涉及到正则表达式的机会,将有关资料阅读了一遍并结合了自己的体会,整理了几篇利用 C# 进行正则表达式编程的文章,一来加深自己的印象和理解,二来供博客上的读者学习借鉴。

    .NET 中提供了对正则表达式的支持,并且提供了相关的类,分别有: Regex Match Group Capture RegexOptions MatchCollection GroupCollection CaptureCollection 。它们之间的关联如下:


     

    对它们描述如下:

    Regex :正则表达式类,代表了一个不可变的正则表达式。

    Match :代表了 Regex 类的实例的一次匹配结果,可以通过 Regex Match() 实例方法返回一个 Match 的实例。

    MatchCollection :代表了 Regex 类的实例的所有匹配结果,可以通过 Regex Matches() 实例方法返回一个 MatchCollection 的实例。

    Group :表示单个捕获组的结果。由于一次匹配可能包含 0 个、 1 个或多个分组,所以 Match 的实例中返回的是捕获组集合的结果,即 GroupCollection

    GroupCollection :表示单个匹配中的多个捕获组的集合,可以通过 Match Groups 实例属性返回 GroupCollection 的实例。

    Capture :表示单个捕获中的一个子字符串。同 Group 一样,由于一个捕获中可能包含 0 个、 1 个或多个子字符串,所以 Group 的实例中返回的是子字符串集合的结果,即 CaptureCollection

    CaptureCollection :默认表示按照从里到外、从左到右的顺序由捕获组匹配到的所有子字符串集合,可以通过 Group 或者 Match Captures 实例属性返回 CaptureCollection 的实例。注意,可以使用 RegexOptions.RightToLeft 来改变这种匹配顺序。

    RegexOptions :提供用于设置正则表达式选项的枚举值。 像上面提到的 RightToLeft 就是它的一个枚举值之一,除此之外还有 None IgnoreCase Multiline ExplicitCapture Compiled Singleline IgnorePatternWhitespace RightToLeft ECMAScript CultureInvariant RegexOptions 枚举值可以相加,比如我们想匹配不区分大小写的字符串“ abc ”并且还想提高一下执行速度,那么可以写如下代码:

    RegexOptions options=RegexOptions.IgnoreCase|RegexOptions.Compiled;

    Regex regex=new Regex("abc",options);

     

    Regex Match Group Capture 的关系及成员

    .NET中正则表达式类之间的关系

     

    从上图可以看出 Regex 类提供了许多静态方法,很多方法还提供了多种重载方式(在图中对存在多种参数重载的方法都以“ ... ”表示),除此之外我们还会发现 Capture Group Match 之间存在继承关系(说实在话刚开始用的时候我发现它们之间存在着很多相同的字段,这让我当时迷惑不已,希望大家看到这个图后不要再像我当初那样迷惑了)。

    在使用 C# 中的正则表达式进行文本处理之前先花点时间了解一下 .NET 中有关正则表达式的类和它们之间的关系是有必要的,这篇就算是预热篇了,在开始学习正则表达式之前做做热身运动。虽然在 C# 中有关正则表达式的类不多,但是对于初学者来说还是容易引起混淆,从而出现不知道该用哪些类的哪些方法或者属性的情况,这篇算是做个初步介绍吧。下一篇就先讲述 Regex 类,利用 Regex 可以用来替换、分割和处理字符串。

  • 相关阅读:
    Visual Studio Code安装Python环境
    Visual Studio Code安装以及C/C++运行环境搭建
    第五场周赛(字符串卡常个人Rank赛)——题解
    SpringCloud学习之二:服务提供者与服务消费者
    SpringCloud学习之一:服务注册中心
    java算法篇之一:动态数组
    Amdahl(阿姆达尔)定律
    org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案
    RedHat6.9下替换yum源
    微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题
  • 原文地址:https://www.cnblogs.com/qixuejia/p/4221357.html
Copyright © 2020-2023  润新知