比如说 string s = "sdfsf@ds ssss@sdds @aa ddsss";
查出ds的id是1。sdds是2。aa是3。
替换成 sdfsf<a href="Default10.aspx?uid=1">@ds</a> ssss<a href="Default10.aspx?uid=2">@sdds</a> <a href="Default10.aspx?uid=3">@aa</a> ddsss
该怎么做呢?

解决方案 »

  1.   


    void Main()
    {
     string s = "sdfsf@ds ssss@sdds @aa ddsss"; 
     s=Regex.Replace(s,@"((@)([^\s]+))",delegate (Match m)
     {
     int id=0;
            switch(m.Groups[3].Value)
              {
        case "ds":
     id=1;
    break;
      case "sdds":
      id=2;
    break;
      case "aa":
      id=3;
    break;
    default:
    break;
              }
      string r=string.Format(@"<a href=""Default10.aspx?uid={0}"">",id);
      return r+m.Value+"</a>";
     });
     Console.WriteLine(s);
     // href="Default10.aspx?uid=1">@ds</a> ssss<a href="Default10.aspx?uid=2">@sdds</a> <a href="Default10.aspx?uid=3">@aa</a> ddsss}
      

  2.   

    既然按顺序 来 我取点巧            string s = "sdfsf@ds ssss@sdds @aa ddsss";
                int i = 1;
                Console.WriteLine(Regex.Replace(s, "@[a-zA-Z]+", m => "<a href=\"Default10.aspx?uid=" + i++.ToString() + "\">" + m + "</a>"));
      

  3.   

            string str = "sdfsf@ds ssss@sdds @Aa ddsss";
            int i=0;
            string result = Regex.Replace(str, @"(?i)@[a-z]+", delegate(Match m)
            {
                i++;
                return "<a href=\"Default10.aspx?uid=" + i.ToString() + "\">" + m.Value + "</a>";
            });
            Response.Write(result);
      

  4.   

      string str = "sdfsf@ds ssss@sdds @Aa ddsss";
                int i = 0;
                str = Regex.Replace(str, @"(?i)@[a-z]+", delegate(Match m) { i++; return "<a href=\"Default10.aspx?uid=" + i + "\">" + m.Value + "</a>"; });  
                Console.Write(str);
    sdfsf<a href="Default10.aspx?uid=1">@ds</a> ssss<a href="Default10.aspx?uid=2">@sdds</a> <a href="Default10.aspx?uid=3">@Aa</a> ddsss
      

  5.   

    查出ds的id是1。sdds是2。aa是3。
    我只是举列。id是根据ds或sdds从数据库里查出来的。
    这个问题我已经解决了。