Regex reg = new Regex(@"(\d)*");
string test = "123";
Console.WriteLine(reg.Replace(test, "$1"));结果显示3,表示reg.Replace(test, "$1"))之渠道$1的最后一次捕捉的值,能否在Replace时取到$1的多次捕捉值

解决方案 »

  1.   

    使用public string Replace(string input, MatchEvaluator evaluator) 
      

  2.   


    Regex reg = new Regex(@"(\d)*");
    string test = "123";
                
    MatchEvaluator me=sm=>{string result="";foreach(Capture c in sm.Groups[1].Captures){result+=c.Value;}return result;};Console.WriteLine(reg.Replace(test, me));
    这的确是个方法,不过不能够通过引用直接取出多次捕获值吗?
      

  3.   

    需求假设:
    字符串"123"需要在数字后面添加一个空格
     Regex reg = new Regex(@"(\d){1}");
                string test = "123";
                string result = reg.Replace(test, delegate(Match match)
                {
                    string value = match.Result("$1");
                    return value + " ";
                });
      

  4.   


    MatchEvaluator 是每找到一次匹配,将匹配替换成委托的返回值。
      

  5.   


    哪里哪里逍遥大哥严重了。呵呵Regex reg = new Regex(@"(\d)*");
    string test = "123";
    Console.WriteLine(reg.Replace(test, "$1"));我其实就是想问reg.Replace(test, "$1"))中时,有没有一种正则的语法把$1的全部捕获(即123)一次性取出来,而不用C#的方法去取。
    可能是本人上面没阐述清楚,抱歉~
      

  6.   

    你再次分组不就可以了。改成这样
    Regex reg = new Regex(@"((\d)*)");
    实现很容易,但这是你要的结果?帖子描述的很简单,我认为你是在做练习,但这样看不出目的。