Regex.Matches和Regex.Replace的几个问题

wmcode 2009-05-12 01:55:16
1.如何用正则将字符串中的"零一二三四五六七八九"分别替换成"0123456789",如"五六一"替换成"561"

Regex.Replace("三二一", "([零一二三四五六七八九])", "([零一二三四五六七八九])".IndexOf("$1"), RegexOptions.IgnoreCase) //$1不能用在IndexOf中,郁闷

2.看下边的正则匹配:

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

结果是:

五千二
一十一

我希望的结果是:

五千二
二百一
一十一

怎么修改代码?
...全文
224 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
starj1 2009-05-13
  • 打赏
  • 举报
回复
字符串的的字符一旦被匹配,在后面就不在可用了。除非仅仅用于条件判断。
-无-为- 2009-05-13
  • 打赏
  • 举报
回复
学习了...
starj1 2009-05-13
  • 打赏
  • 举报
回复
对第二个问题,只能崇拜了.正则表达式有那么强大吗?
starj1 2009-05-13
  • 打赏
  • 举报
回复
这种简单的东西就别用正则表达式了吧...
        private string ConvertToDigit(string ToConvert)
{
const string sBigNumeric = "零一二三四五六七八九";
const string sSmallNumeric = "0123456789";
for (Int32 I = 0; I < sBigNumeric.Length; I++)
ToConvert = ToConvert.Replace(sBigNumeric[I], sSmallNumeric[I]);
return ToConvert;
}
Learn-anything 2009-05-13
  • 打赏
  • 举报
回复
第一个问题:

private void button1_Click(object sender, RoutedEventArgs e)
{
string sInput, sRegex;

sInput = "六五一";

sRegex = "[零一二三四五六七八九]";

Regex r = new Regex(sRegex);

MatchEvaluator myEvaluator = new MatchEvaluator(ReplaceCC);

sInput = r.Replace(sInput, myEvaluator);

MessageBox.Show(sInput);

}

public string ReplaceCC(Match m)
{
string result = string.Empty;
switch(m.Value)
{
case "零":
result ="0";
break;
case "一":
result = "1";
break;
case "二":
result = "2";
break;
case "三":
result = "3";
break;
case "四":
result = "4";
break;
case "五":
result = "5";
break;
case "六":
result = "6";
break;
case "七":
result = "7";
break;
case "八":
result = "8";
break;
case "九":
result = "9";
break;
default:
break;
}

return result;
}
wmcode 2009-05-12
  • 打赏
  • 举报
回复
@HDNGO

谢了,我这还是vs2005,不能用Linq
HDNGO 2009-05-12
  • 打赏
  • 举报
回复
1.搞个Linq的解法~

public void Linq8() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

var textNums =
from n in numbers
select strings[n];

Console.WriteLine("Number strings:");
foreach (var s in textNums) {
Console.WriteLine(s);
}
}
wmcode 2009-05-12
  • 打赏
  • 举报
回复
up
zx_lxq 2009-05-12
  • 打赏
  • 举报
回复
帮你顶 学习

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧