C#中 Lambda表达式 与正则表达式的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中 Lambda表达式 与正则表达式的关系相关的知识,希望对你有一定的参考价值。
有点混淆,Lambda表示式就是正则表达式还是二者没有任何关联?
八竿子打不着的关系lambda表达式是函数式语言的特性,c#利用自身动态编译的特性才实现这种效果的,可以用它写匿名函数等.像C,C++神马的都没有的.
正则是各语言都有实现的,用来查询匹配等的 参考技术A
C#中 Lambda表达式 与正则表达式的关系
色。。图片。。。色。。。小说
很精彩。。论。。坛。。。在。。。线...电。。影
UDP。sohu.7haose.com。UOP
9q
参考技术B => 是 Lambda 运算符 ,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。
d 是由 lambda表达式自动推断出来的,在这里d 就是一个Dinner实体啊
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 #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( "<" , "<" ).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#中 Lambda表达式 与正则表达式的关系的主要内容,如果未能解决你的问题,请参考以下文章