C# 中正则表达式 Group 分组【转】
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 #8000801A 共有 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("<", "<").Replace(">",">") + "<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 分组【转】的更多相关文章
- C# 中正则表达式 Group 分组
在一个正则表达式中,如果要提取出多个不同的部分(子表达式项),需要用到分组功能. 在 C# 正则表达式中,Regex 成员关系如下,其中 Group 是其分组处理类. Regex –> Matc ...
- spring @Validated 注解开发中使用group分组校验
之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...
- Python: 正则表达式中的group()
正则表达式中,group()用来提出分组截获的字符串,()用来分组 eg:
- 浅析mongodb中group分组
这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...
- 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)
今天在工作中遇到了点替换的麻烦事,由于数据类进行了变动,具体情况是这样的,需要将下面的代码: player.skillData[i].name 替换为: player.skillData.getSki ...
- signalr中Group 分组群发消息的简单使用
前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...
- mongodb命令行group分组和java代码中group分组
group分组统计是数据库比较常用的功能,mongodb也不例外.不过相对于普通的增删改查,group操作就略微麻烦一些, 这里对group在shell中的操作.使用java原生代码操作以及集成spr ...
- 在mysql中使用group by和order by取每个分组中日期最大一行数据
转载自:https://blog.csdn.net/shiyong1949/article/details/78482737 在mysql中使用group by进行分组后取某一列的最大值,我们可以直接 ...
- SQL Server中的group by(分组)
参考网址: https://blog.csdn.net/tswc_byy/article/details/81909052 sql 查询不必需和聚合函数一起使用 ,通常来说一般是要和聚合函数一起使用来 ...
随机推荐
- Centos调出图形化的网络管理
在Linux中设置网路,图形化很方便.在命令行下/etc/sysconfig/network-scripts/ifcfg-eth0 00.命令行下修正网路 [root@dzswj-test ~]#ca ...
- FZU - 2039 Pets (二分图匹配 2011年全国大学生程序设计邀请赛(福州))
Description Are you interested in pets? There is a very famous pets shop in the center of the ACM ci ...
- PHP开发安全问题
1.不相信表单 对于一般的Javascript前台验证,由于无法得知用户的行为,例如关闭了浏览器的javascript引擎,这样通过POST恶意数据到服务器.需要在服务器端进行验证,对每个php脚本验 ...
- HDUOJ----2952Counting Sheep
Counting Sheep Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Extending_and_embedding_php翻译
http://blog.csdn.net/lgg201 博客翻译了Extending_and_embedding_php
- JMeter学习笔记--JMeter执行顺序规则
JMeter执行顺序规则: 配置元件 前置处理器 定时器 采样器 后置处理器(除非服务器响应为空) 断言 监听器 只有当作用域内存在采样器时,定时器.断言.前置/后置处理器才会被执行,逻辑控制器和采样 ...
- 于C#控制台传递参数和接收参数
前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...
- linux下core dump
1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志.我不知所措,同事叫我看看core,我却问什么是core,怎么看. ...
- Linux进程概述
一.介绍 当linux系统中的一个进程运行起来的时候,总是要访问系统的资源,访问文件或者向其他的进程发送信号.系统是否允许其进行这些操作?系统是根据什么来判断该进程的权限?这些问题是和进程信任状(pr ...
- Shell基础知识和编程规范
一,Shell环境查看 1.1 查看系统Shell支持情况 [root@linux-node1 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin ...