我有一个字符串:
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
我从数据库中已经取出一个DataSet 有6条记录.比如 记录1,记录2,记录3,记录4,记录5,记录6
将AAA替换成这些记录..我该怎么做.?????

解决方案 »

  1.   

    我是这样做的
    string s = <tr>
    <td>AAA</td>
    <td>AAA</td>
    <td>AAA</td>
    </tr>
    <tr>
    <td>AAA</td>
    <td>AAA</td>
    <td>AAA</td>
    </tr>MatchCollection ms = Regex.Matches(s,正则,RegexOptions.IgnoreCase);
    for(int i=0;i<ms.Count;i++)
    {
    s=s.Replace(ms[i].Value,ds.Tables[0].Rows[i][0].ToString());
    }
    但这样的结果是,所有的AAA都变成了 记录1 ..
    请问该怎么解决这个问题
      

  2.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <SCRIPT LANGUAGE="JavaScript" for=window event=onload>
    <!--
    var datas=Array("记录1","记录2","记录3","记录4","记录5","记录6");
    var dataElement=document.getElementById("datas");
    var childrens=dataElement.children;
    var mm=0;
    for(var i=0;i<childrens.length;i++){
        
    var tdValue=childrens[i].children;
    for(var k=0;k<tdValue.length;k++){
        tdValue[k].innerText=datas[mm];
    mm++;
    }
    }
    //-->
    </SCRIPT>
    </HEAD><BODY>
    <table>
    <tbody id="datas">
    <tr>
    <td>AAA</td>
    <td>AAA</td>
    <td>AAA</td>
    </tr>
    <tr>
    <td>AAA</td>
    <td>AAA</td>
    <td>AAA</td>
    </tr>
    </tbody>
    </table>
    </BODY>
    </HTML>
      

  3.   

    为什么用正则?
    代码岂不是更快
    using System;
    using System.Text;public class MyClass
    {
        public static void Main()
        {
    //以下代码用于生成模拟数据
    //************************
            const int LENGTH = 11;
            string[] strArray = new string[LENGTH];
            for(int i = 0; i < LENGTH; ++i)
            {
                strArray[i] = i.ToString();
            }
    //************************
    //以上代码用于生成模拟数据 //生成的表格的列数,大于0
            const int COLUMN_COUNT = 3;
    //获得数据的数量
            int count = strArray.Length;
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < count; i += COLUMN_COUNT)
            {
                sb.Append("<tr>\r\n");
                for(int j = 0; j < COLUMN_COUNT; ++j)
                {
    //如果下标大于数据数量,退出
                    if(i + j >= count)
                    {
                        break;
                    }
                    sb.AppendFormat("<td>{0}</td>\r\n", strArray[i + j]);
                }
                sb.Append("</tr>\r\n");
            }
            Console.WriteLine(sb.ToString());
            Console.ReadLine();
        }
    }
      

  4.   

    <td><tr> 是从一个模板里读出来的哦...不是写死的呀
      

  5.   

    <BYB_Documents ID="热点新闻"  NUM="6">
    <tr>
        <BYB_RECORD NUM=3><td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td></BYB_RECORD>
     </tr>
    </BYB_Documents>比如说这段模板就是取热点新闻的6条记录,  BYB_RECORD NUM=3 就是一行3条
    BYB_Document FIELD="DOCTITLE" 就是取标题.现在我根据正则已经生成了
    <tr>
    <td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
    <td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
    <td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
    </tr>
    <tr>
    <td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
    <td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
    <td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
    </tr>这样的字符串现在只需要把 
    BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document>
    替换成相应的记录标题就可以了.6个标题在一个DATESET里存着了..就是这样的情况
      

  6.   

    private void test_Click(object sender, EventArgs e)
    {
        Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));
    }
    int i = 0;
    DataSet ds1 = new DataSet();
    string DoReplace(Match m)
    {
        return ds1.Tables[0].Rows[i]["ColumnName"].ToString();
        i++;
    }
      

  7.   

    我按F11怎么没走到  string DoReplace(Match m) 这个委托呢..
      

  8.   

    Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));是不是只能写在点击事件中???
    不能写在一个类库的方法里???
      

  9.   

    wxl565(汪汪) ( ) 信誉:98    Blog  2006-12-19 16:54:45  得分: 0  
     
     
    楼上的朋友  你的i++好象永远也访问不到呀
    ______________________________________________哈哈,确实!
    更正如下:private void test_Click(object sender, EventArgs e)
    {
        Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));
    }
    int i = 0;
    DataSet ds1 = new DataSet();
    string DoReplace(Match m)
    {
        try
        {
            return ds1.Tables[0].Rows[i]["ColumnName"].ToString();
        }
        finally
        {
            i++;
        }
    }
      

  10.   

    fmf789(333) ( ) 信誉:100    Blog  2006-12-19 17:26:07  得分: 0  
     
     
    Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));是不是只能写在点击事件中???
    不能写在一个类库的方法里???
    _________________________________当然可以写在类方法里,只是我为了测试才写在按钮里的。
    //using System.Text.RegularExpressions;
      

  11.   

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Text.RegularExpressions;DataSet tempDS=得到的DS;public string checkDocument(string s)
    {

    MatchEvaluator myEvaluator = new MatchEvaluator(this.DoReplace);
    s=Regex.Replace(s,Regexs_DL.BYB_DOCUMENT,myEvaluator);
                                return s;//返回替换后S.
                      }
    public  string DoReplace(Match m)
    {
    try
    {
    return tempDS.Tables[0].Rows[i][0].ToString();
    }
    finally
    {
    i++;
    }

    }我F11跟踪的时候..发现return s;//返回替换后S.  S的值没变化.....
      

  12.   

    就没有走进 public  string DoReplace(Match m)
    {
             }
    这里面就Return了.... 能帮忙解决 另送分.谢谢了.
      

  13.   

    测试通过:private void button2_Click(object sender, EventArgs e)
    {
        string str = Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));
        MessageBox.Show(str);//str="<tr><td>1</td><td>2</td><td>3</td></tr>"
    }
    int i = 0;
    string[] strArr = new string[] { "1", "2", "3", "4", "5" };
    string DoReplace(Match m)
    {
        try
        {
            return strArr[i];
        }
        finally
        {
            i++;
        }
    }
      

  14.   

    有可能你的Regexs_DL.BYB_DOCUMENT中有特殊字符,如果有,请用\取消其在正则中的转义。
      

  15.   

    和我的问题差不多,就是想实现新闻列表现实与程序分离,只通过简单设置模块参见:http://community.csdn.net/Expert/topic/5230/5230158.xml?temp=.1205255http://community.csdn.net/Expert/topic/5242/5242052.xml?temp=.4362451
      

  16.   

    有可能你的Regexs_DL.BYB_DOCUMENT中有特殊字符,如果有,请用\取消其在正则中的转义。
    -------------------------------------------------------------------------
    的确有特殊字符..还不少呢.如何取消转义????public const string BYB_DOCUMENT="<(BYB_DOCUMENT)[^>]*?(?:(?:FIELD\\s*=\\s*[\"\']?(?<FIELD>[^\"\'\\s>]*)|NUM\\s*=\\s*[\"\']?(?<NUM>[^\"\'\\s>]*)|EXTRA\\s*=\\s*[\"\']?(?<EXTRA>[^\"\'\\s>]*)|DATEFORMAT\\s*=\\s*[\"\']?(?<DATEFORMAT>[^\"\'\\s>]*)|AUTOLINK\\s*=\\s*[\"\']?(?<AUTOLINK>[^\"\'\\s>]*)|TARGET\\s*=\\s*[\"\']?(?<TARGET>[^\"\'\\s>]*)|)[^>]*?)*>(?<innerhtml>[\\s\\S]*?)</\\1>";这是我定义的正则...