string[] ss = { "345.00", "456", "2345.90", "341.56" };
foreach (string s in ss)
{
Console.WriteLine(Regex.Replace(s, @"^(\d*)\d(?:\.\d+)?$",
@"$$${1}9.00"));
}
输出:
$349.00
$459.00
$2349.00
$349.00
最初,(\d*)
比赛尽可能多的数字作为它可以将它们存储在捕获组#1中(例如,它匹配中的)。然后它退出一个位置,让\d
匹配最后一位数字(组#1现在只包含34
)。最后,如果有一个(.56
,在这种情况下)(?:\.\d+)?
匹配分数。
在替换中,$$
插入一个美元符号($
在替换中有特殊含义,因此您必须用另一个$
将其转义)。 ${1}
插入捕获组#1的内容(在341.56
的情况下为34
)。通常情况下,您只能使用$1
,但是这次组参考后面跟着另一个数字,因此它看起来像我指的是组#19。围绕着1
的大括号明确告诉我我想要1号组,然后是9
。最后,.00
完成替换。
你想出的正则表达式使用了命名捕获组,所以你使用${price1}
而不是${1}
来插入数字的第一部分。其他两个捕获组不需要。事实上,那里有很多东西并不属于真正的属性。我看到你现在正在移除小数部分,而不是用.00
替换它。
还有一件事:在开始替换之前,您不需要拨打IsMatch()
;这由Replace()
方法处理。
为什么你必须使用正则表达式? – NullUserException 2010-08-24 23:19:10