正则表达式10-替换

好吧,到目前为止,貌似只有搜索的,那我要是想替换原始字符串中的某个部分怎么办呢?嗯,本章就是为了解决这个问题存在的。

要使用替换功能,请使用微软提供的 Regex.Replace() 方法,记得引用 using System.Text.RegularExpressions 命名空间

先来看两个简单的替换:

表达式

含义

$分组编号

将搜索到的结果替换为编号为 1 的组

${分组名称}

将搜索到的结果替换为该名称所在的组

例子 1

原始字符串:$16.32 12.19 £16.29 €18.29 €18,29

正则表达式:\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*

替换表达式:$1

本例子的作用是将各种钱币符号去掉。

程序如下:

const string input = "$16.32 12.19 £16.29 €18.29  €18,29";
const string pattern = @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*";
const string replacement = "$1";

string result = Regex.Replace(input, pattern, replacement);

Console.WriteLine(result);

程序输出结果:16.32 12.19 16.29 18.29 18,29

解释:正则表达式是一个分组表达式,它搜索带或者不带钱币符号的数字,找到该数字后,将其编号为 1 组;替换表达式的意思就是要将匹配的结果替换成 1 组,也就是纯数字,这样就去掉了钱币符号。

例子 2

还记得 分组搜索 中的 通过名字引用组 么?

上面的例子我们可以改写一下,不用分组编号,而用分组名称来实现。

程序如下:

string input = "$16.32 12.19 £16.29 €18.29  €18,29";
string pattern = @"\p{Sc}*(?<amount>\s?\d+[.,]?\d*)\p{Sc}*";
string replacement = "${amount}";

string result = Regex.Replace(input, pattern, replacement);

Console.WriteLine(result);

程序输出结果:16.32 12.19 16.29 18.29 18,29

所谓条条大路通罗马,无论用那种方法,结果都是一样的。

替换表达式除了上面两种以外,还有下面几种:

$$

替换 $ 符号

$&

替换字符串中整个匹配的副本。

$`

替换字符串中的匹配项为其前的所有字符。

$'

替换字符串中的匹配项为其后的所有字符。

$+

在替换字符串中捕获的最后一个组。可用于处理重复的单词

$_

用完整的 input 字符串替换字符串中的匹配项。

这里就不一一介绍了,查查 MSDN 吧。都不难,就是利用了分组搜索而已。

好了,至此,我们正则表达式入门的介绍就到此为止了。

所谓熟能生巧,大家多练习,多思考,多看看 MSDN 吧,以后正则表达式你就是高手了!

posted @ 2013-03-09 14:55  优秀程序缘  阅读(280)  评论(0编辑  收藏  举报