我现在的正表替换是
        public static string Set(string strTemp, string Temp1, string Temp2)
        {
            Regex r = new Regex(@"(\$" + Temp1.Replace("[", @"\[").Replace("]", @"\]") + ")", RegexOptions.IgnoreCase);
            if (r.IsMatch(strTemp))
            {
                strTemp = r.Replace(strTemp, Temp2);
            }
            return strTemp;
        }        public static string Set(string strTemp, Skins[] skin)
        {
            string p;
            foreach (Skins s in skin)
            {
                p = @"(\$" + s.Name.Replace("[", @"\[").Replace("]", @"\]") + ")";
                strTemp = Regex.Replace(strTemp, p, s.Value, RegexOptions.IgnoreCase);
            }
            return strTemp;
        }
这样每次都会建立一个匹配符,怎么只建立一个通用匹配符

解决方案 »

  1.   

    I don't understand what are you talking about.
      

  2.   


    string strTemps = "....内容省略";//里面有内容$post $list等set(strTemps,"post","abcd");
    set(strTemps,"list","12345");
    或是
    Skins[] skin = {
         new Skins("post","abcd"),
         new Skins("list","12345")
    };public string Set(string strTemp, string Temp1, string Temp2)
      {
      Regex r = new Regex(@"(\$" + Temp1.Replace("[", @"\[").Replace("]", @"\]") + ")", RegexOptions.IgnoreCase);
      if (r.IsMatch(strTemp))
      {
      strTemp = r.Replace(strTemp, Temp2);
      }
      return strTemp;
      }  public string Set(string strTemp, Skins[] skin)
      {
      string p;
      foreach (Skins s in skin)
      {
      p = @"(\$" + s.Name.Replace("[", @"\[").Replace("]", @"\]") + ")";
      strTemp = Regex.Replace(strTemp, p, s.Value, RegexOptions.IgnoreCase);
      }
      return strTemp;
      }现在我每次替换都要Regex r = new Regex(@"(\$" + Temp1.Replace("[", @"\[").Replace("]", @"\]") + ")", RegexOptions.IgnoreCase);一次,怎么只写一个表达式然后所有的替换中都可以用到
      

  3.   

    Try:Regex r = new Regex(@"(\$" + Regex.Escape(Temp1) + ")", RegexOptions.IgnoreCase);
      

  4.   

    意思是把Regex r = new Regex(@"(\$" + Temp1.Replace("[", @"\[").Replace("]", @"\]") + ")", RegexOptions.IgnoreCase);换成一个不要输入Temp1,并且都可以用到的表达式,但是要匹配Temp1的内容,Temp1中的值也可能是$lsit[a]
      

  5.   


    Regex r = new Regex(@"(\$" + Temp1.Replace("[", @"\[").Replace("]", @"\]") + ")", RegexOptions.IgnoreCase);
    不是写在public string Set(string strTemp, string Temp1, string Temp2)
    {
    }里面的哦