ITPub博客

首页 > Linux操作系统 > Linux操作系统 > C#正则表达式(RegEx)高级应用之分组(Group)替换(Replace)

C#正则表达式(RegEx)高级应用之分组(Group)替换(Replace)

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-04-13 14:51:21 0 删除 编辑

今天,说一下 .NET 里面 正则 使用的稍微高级一些的技巧:分组替换 ,下面我们举两个实例来说明这个问题:

一段字符串,把其中出现的 Ax,Ay 形式的内容,替换为 Ax 的形式(也就是 ,和Ay 都不要了),其中x 和y是数字,位长是 1~2,并且不会出现连排的形式

对于上面的需求,我们进行分析后,可以得出:上面的匹配规则,分为2组,(Ax) 一组,(,Ay) 一组  匹配后,直接返回第一组就OK了

对于.NET来说,分组替换的实现,有多种方式,我这里展示其中的2种,对于上面的例子,我使用 MatchEvaluator 方式

static string CustomReplace(System.Text.RegularExpressions.Match m) 
{ 
    return m.Groups[1].Value; //直接返回分组1
}

string sourceString = "....."; 
string pattern = @"(A\d{1,2})(,A\d{1,2})"; 
System.Text.RegularExpressions.MatchEvaluator myEvaluator = new System.Text.RegularExpressions.MatchEvaluator(CustomReplace); 
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase| System.Text.RegularExpressions.RegexOptions.Multiline); 

string resultString = reg.Replace(sourceString, myEvaluator); 

需求是需要对这个FLASH的代码进行自定义,将 宽度 替换为自定义的值

对于这个例子,我们使用分组号 $# 的方式来实现,#代表数字,经过分析,可以得出,将上面的内容,分为3组

string sourceString = "......";
string toWidth = "300"; //自定义的宽度
string pattern = "(;
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
string resultString = reg.Replace(sourceString, "${1}" + toWidth + "${3}");
    

为了区分分组编号和普通字符,可以用{}标注分组号

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-567493/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5321873