Regex.Replace替换不完全的问题

string txt = "五千二百一十一";
string pattern = "([零一二三四五六七八九])[十百千万亿]([零一二三四五六七八九])";
Console.WriteLine(Regex.Replace(txt, pattern, "$1$2", RegexOptions.IgnoreCase));

上边例子的结果为"五二百一一",而不是我的期望"五二一一",为什么呢?我们再来看一个例子:

string txt = "五千二百一十一";
string pattern = "([零一二三四五六七八九])[十百千万亿]([零一二三四五六七八九])";
MatchCollection matchs = Regex.Matches(txt, pattern, RegexOptions.IgnoreCase);
foreach (Match match in matchs)
    Console.WriteLine(match.Value);

结果:

引用内容 引用内容
五千二
一十一


也就是说,我们无法使用上边的代码对"二百一"进行替换。修改后正确的代码:

string txt = "五千二百一十一";
string pattern = "([零一二三四五六七八九])[十百千万亿]([零一二三四五六七八九])";
while (Regex.IsMatch(txt, pattern, RegexOptions.IgnoreCase))
    txt = Regex.Replace(txt, pattern, "$1$2", RegexOptions.IgnoreCase);
Console.WriteLine(txt);


上一篇: 关于结构和类的区别
下一篇: 金额大小写转化类
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 4541
发表评论
登录后再发表评论!