C#正则表达式(RegEx)高级应用之分组(Group)替换(Replace)
2009-03-14 21:08
1281 查看
对于复杂的、符合一定规则的字符串替换来说,正则表达式无疑是强悍和高效的选择
对于正则表达式的使用,我也写过几篇帖子了,具体可以见下面的地址
http://zu14.cn/tag/regex/
今天,说一下 .NET 里面 正则 使用的稍微高级一些的技巧:分组替换 ,下面我们举两个实例来说明这个问题:
一段字符串,把其中出现的 Ax,Ay 形式的内容,替换为 Ax 的形式(也就是 ,和Ay 都不要了),其中x 和y是数字,位长是 1~2,并且不会出现连排的形式
对于上面的需求,我们进行分析后,可以得出:上面的匹配规则,分为2组,(Ax) 一组,(,Ay) 一组 匹配后,直接返回第一组就OK了
对于.NET来说,分组替换的实现,有多种方式,我这里展示其中的2种,对于上面的例子,我使用 MatchEvaluator 方式
一段HTML代码,是用来插入FLASH的,形式如: <embed width=”1000” src=”…” …></embed>
需求是需要对这个FLASH的代码进行自定义,将 宽度 替换为自定义的值
对于这个例子,我们使用分组号 $# 的方式来实现,#代表数字,经过分析,可以得出,将上面的内容,分为3组
为了区分分组编号和普通字符,可以用{}标注分组号
对于正则表达式的使用,我也写过几篇帖子了,具体可以见下面的地址
http://zu14.cn/tag/regex/
今天,说一下 .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);
一段HTML代码,是用来插入FLASH的,形式如: <embed width=”1000” src=”…” …></embed>
需求是需要对这个FLASH的代码进行自定义,将 宽度 替换为自定义的值
对于这个例子,我们使用分组号 $# 的方式来实现,#代表数字,经过分析,可以得出,将上面的内容,分为3组
string sourceString = "......"; string toWidth = "300"; //自定义的宽度 string pattern = "(<embed .+? width\\s{0,}=\\s{0,}\"{0,1})(\\d+)(\"{0,1})"; System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); string resultString = reg.Replace(sourceString, "${1}" + toWidth + "${3}");
为了区分分组编号和普通字符,可以用{}标注分组号
相关文章推荐
- C#正则表达式(RegEx)高级应用之分组(Group)替换(Replace)
- C++ - 正则表达式(regex) 替换(replace) 的 详解 及 代码
- C# 利用正则表达式进行忽略大小写的字符串替换的应用--自定义高亮显示
- C#中的正则表达式的分组应用
- [ 转]C# 中使用正则表达式 Regex.Matches方法的几个应用
- JavaScript中简单应用正则表达式的小实例_文本替换_replace
- C++ - 正则表达式(regex) 替换(replace) 的 详解 及 代码
- 正则表达式基础应用(替换replaceAll(regex,str))
- C#中正则表达式在replace中的应用!
- C# 正则表达式替换分组内的内容
- JavaScript中简单应用正则表达式的小实例_文本替换_replace
- C# 中正则表达式 Group 分组
- C++ - 正则表达式(regex) 替换(replace) 的 详解 及 代码
- C#中正则表达式的高级应用
- C# 中正则表达式 Group 分组
- Java正则表达式:让分组group()代替replaceAll吧!
- C# 中正则表达式 Group 分组【转】
- C#中正则表达式的高级应用
- C# 中使用正则表达式 Regex.Matches方法的几个应用
- C#中正则表达式在replace中的应用!