http://www.cnblogs.com/kiant71/archive/2010/08/14/1799799.html

在一个正则表达式中,如果要提取出多个不同的部分(子表达式项),需要用到分组功能。

在 C# 正则表达式中,Regex 成员关系如下,其中 Group 是其分组处理类。

Regex –> MatcheCollection (匹配项集合)

–> Match (单匹配项 内容)

–> GroupCollection (单匹配项中包含的 "(分组/子表达式项)" 集合)

–> Group ( "(分组/子表达式项)" 内容)

–> CaputerCollection (分组项内容显示基础?)

–> Caputer

Group 对分组有两种访问方式:

1、数组下标访问

在 ((\d+)([a-z]))\s+ 这个正则表达式里总共包含了四个分组,按照默认的从左到右的匹配方式,

Groups[0]    代表了匹配项本身,也就是整个整个表达式 ((\d+)([a-z]))\s+

Groups[1]    代表了子表达式项 ((\d+)([a-z]))

Groups[2]    代表了子表达式项 (\d+)

Groups[3]    代表了子表达式项 ([a-z])

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080";
Response.Write(text + "<br/>");
 
string strPatten = @"((\d+)([a-z]))\s+";
Regex rex = new Regex(strPatten, RegexOptions.IgnoreCase);
MatchCollection matches = rex.Matches(text);
 
//提取匹配项
foreach (Match match in matches)
{
    GroupCollection groups = match.Groups;
    Response.Write(string.Format("<br/>{0} 共有 {1} 个分组:{2}<br/>"
                                , match.Value, groups.Count, strPatten));
 
    //提取匹配项内的分组信息
    for (int i = 0; i < groups.Count; i++)
    {
        Response.Write(
            string.Format("分组 {0} 为 {1},位置为 {2},长度为 {3}<br/>"
                        , i
                        , groups[i].Value
                        , groups[i].Index
                        , groups[i].Length));
    }
}
 
/*
 * 输出:
 1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080
 
1A 共有 4 个分组:((\d+)([a-z]))\s+
分组 0 为 1A ,位置为 0,长度为 3
分组 1 为 1A,位置为 0,长度为 2
分组 2 为 1,位置为 0,长度为 1
分组 3 为 A,位置为 1,长度为 1
  
 ....
  
 */

2、命名访问

利用 (?<xxx>子表达式) 定义分组别名,这样就可以利用 Groups["xxx"] 进行访问分组/子表达式内容。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
string text = "I've found this amazing URL at http://www.sohu.com, and then find ftp://ftp.sohu.comisbetter.";
Response.Write(text + "<br/>");
 
string pattern = @"\b(?<protocol>\S+)://(?<address>\S+)\b";
Response.Write(pattern.Replace("<", "&lt;").Replace(">","&gt;") + "<br/><br/>");
 
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
    GroupCollection groups = match.Groups;
    Response.Write(string.Format(
                    "URL: {0}; Protocol: {1}; Address: {2} <br/>"
                    , match.Value
                    , groups["protocol"].Value
                    , groups["address"].Value));
}
 
/*
 * 输出
 I've found this amazing URL at http://www.sohu.com, and then find ftp://ftp.sohu.comisbetter.
    \b(?<protocol>\S+)://(?<address>\S+)\b
 
    URL: http://www.sohu.com; Protocol: http; Address: www.sohu.com
    URL: ftp://ftp.sohu.comisbetter; Protocol: ftp; Address: ftp.sohu.comisbetter
 
 */

内容参考自:

C#正则表达式编程(三):Match类和Group类用法    http://blog.csdn.net/zhoufoxcn/archive/2010/03/09/5358644.aspx

C#正则表达式类Match和Group类的理解    http://tech.ddvip.com/2008-10/122483707982616.html

C# 中正则表达式 Group 分组【转】的更多相关文章

  1. C# 中正则表达式 Group 分组

    在一个正则表达式中,如果要提取出多个不同的部分(子表达式项),需要用到分组功能. 在 C# 正则表达式中,Regex 成员关系如下,其中 Group 是其分组处理类. Regex –> Matc ...

  2. spring @Validated 注解开发中使用group分组校验

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...

  3. Python: 正则表达式中的group()

    正则表达式中,group()用来提出分组截获的字符串,()用来分组 eg:

  4. 浅析mongodb中group分组

    这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...

  5. 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)

    今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码: player.skillData[i].name 替换为: player.skillData.getSki ...

  6. signalr中Group 分组群发消息的简单使用

    前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...

  7. mongodb命令行group分组和java代码中group分组

    group分组统计是数据库比较常用的功能,mongodb也不例外.不过相对于普通的增删改查,group操作就略微麻烦一些, 这里对group在shell中的操作.使用java原生代码操作以及集成spr ...

  8. 在mysql中使用group by和order by取每个分组中日期最大一行数据

    转载自:https://blog.csdn.net/shiyong1949/article/details/78482737 在mysql中使用group by进行分组后取某一列的最大值,我们可以直接 ...

  9. SQL Server中的group by(分组)

    参考网址: https://blog.csdn.net/tswc_byy/article/details/81909052 sql 查询不必需和聚合函数一起使用 ,通常来说一般是要和聚合函数一起使用来 ...

随机推荐

  1. 查看tomcat启动文件都干点啥---catalina.bat(转)

    在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina. ...

  2. Eclipse集成ijkplayer并实现本地和网络视频播放等

    概述 Eclipse 集成ijkplayer demo,播放本地视频.和rtmp流. 详细 代码下载:http://www.demodashi.com/demo/10630.html 原文地址:Ecl ...

  3. 关于多线程中使用ArrayList的问题

    多线程全局变量:1.定义只读的全局变量时,必须加final修饰,即使是private的,防止被反射修改.2.对于需要多次读写的全局变量,一定要用ThreadLocal封装,避免多线程并发时变量被多次赋 ...

  4. Nginx配置error_page 404错误页面

    问题由来 昨天一网友在segmentfault.com上提问,无法做404重定向 打开对方的网站随便输入一个错误的地址发现给出了404代码,但是页面完全空白,并没有显示404页面的设定内容 当时就明白 ...

  5. PHP 多个mysql连接的问题

    今天在同一个php进程中用mysql_connect新建了两个mysql句柄,这两个句柄都连接同一台数据库,只不过操作的数据库dbname不同,假设这两个句柄分别是$dbhA和$dbhB,它们对应的数 ...

  6. javascript书籍推荐

    本文转自:http://blog.csdn.net/yangnihaozan/article/details/48294545 在当下,极多的程序员是通过自学来完成入门以及提升的.对于JavaScri ...

  7. iOS添加到购物车的简单动画效果

    #pragma mark - 添加到购物车的动画效果 // huangyibiao - (void)addAnimatedWithFrame:(CGRect)frame { // 该部分动画 以sel ...

  8. UE 技巧

    http://cache.baiducontent.com/c?m=9d78d513d98416b8599d830e7c01a7170e2585744ddcc4523f8a9c12d522195646 ...

  9. Python练习笔记——计算输入日期为改年的第几天、星期几

    # 输入年月日,如:1995年12月10日,计算是该年的第几天?# 同时计算出当天是星期几? print("请依据提示依次输入您想查询的年 月 日") # 第一段代码块(年月日输入 ...

  10. 使用Xcode 查看objective-C的汇编代码

    Xcode自带将某一个源文件转化成汇编的功能.如图: 汇编的部分代码例如以下: # Assembly output for assemble.c # Generated at 2:29:34 下午 o ...