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);
结果是:五千二
一十一我希望的结果是:五千二
二百一
一十一怎么修改代码?

解决方案 »

  1.   

    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);
        }           
    }
      

  2.   

    @HDNGO 谢了,我这还是vs2005,不能用Linq
      

  3.   

    第一个问题: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;
            }
      

  4.   

    这种简单的东西就别用正则表达式了吧...
            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;
            }