string str = "a1_a2_a3";Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("a1", "北京");
d.Add("a2", "上海");
d.Add("a3", "广州");Regex regex = new Regex(@"\w\d");string str2 = regex.Replace(str,"中");
//这样的结果是str2为中_中_中string str2 = regex.Replace(str, "$0=$0");
//这样的结果是str2为a1=a1_a2=a2_a3=a3 
             
string str2 = regex.Replace(str, d["a1"]);
//这样的结果是str2为北京_北京_北京string str2 = regex.Replace(str, d["$0"]);
//为什么这样运行就出错?
//$0不是依次为a1,a2,a3吗?
真搞不明白。是不是d[]的优先级与正则表达式的$0的问题。没学过正则表达式啊。        

解决方案 »

  1.   

    string str2 = regex.Replace(str, d["$0"]); 
    //为什么这样运行就出错? 
    //$0不是依次为a1,a2,a3吗? 
    $0在这里被认为是key值了,你根本就没有这样的key
    只有a1,a2,a3三个key
      

  2.   

    string str2 = regex.Replace(str, d["$0"]); 改成这样试试嗫?string str2 = regex.Replace(str, "$0"); 
      

  3.   

    try:string str2 = regex.Replace(str, new MatchEvaluator(delegate(Match match) { return d[match.Groups[0].Value]; }));
      

  4.   

    using System;
    using System.Collections.Generic;class A
    {
      static void Main()
      {
        string str = "a1_a2_a3"; 
        
        Dictionary <string, string> d = new Dictionary <string, string>(); 
        d.Add("a1", "北京"); 
        d.Add("a2", "上海"); 
        d.Add("a3", "广州"); 
        
        foreach (string key in d.Keys)
        {
          str = str.Replace(key, d[key]);
        }
        Console.WriteLine(str); // 输出:北京_上海_广州
      }
    }
      

  5.   

    ojlovecd的正则不错,我把它简化了一下:
    string str2 = regex.Replace(str, delegate(Match match) { return d[match.Value]; });
      

  6.   

    如果楼主用的是vs2008,可以更简单:string str2 = regex.Replace(str, match => d[match.Value]);
      

  7.   

    谢谢各位大侠。结帖了。
    最喜欢ojlovecd的
    string str2 = regex.Replace(str, match => d[match.Value]);其他的也可行。