有一个关键字数组string[],内有n个关键字(中文)
有一个目标字符串,内有<br> <font>等html代码
想要替换掉目标字符串中出现的关键字(只要是在string[]中出现的),同时能忽略掉html代码中含在<    >中的内容。
比如说 string[] 中有 “上海”“北京”“天津”"abc"
目标字符串为 "上海在北京和天津的<br >南边<a href="#">ddd</a>"统一替换为"<a>上海</a>在<a>北京</a>和<a>天津</a>的<br >南边<a href="#">ddd</a>"我现在用循环的方法解决(但是没有办法解决忽略<  >中的办法)。但是这种情况能用正则表达式一次解决掉吗?请高手赐教。

解决方案 »

  1.   

    忽略<  >很容易的吧,获取只段的时候直接去TEXT类型的值,C#里边我没用过,不过应该有的,DOM里边的OUTTEXT 就是取字符的,OUTHTML是包含HTML代码的
      

  2.   

    libany(紫心灯) ( ) 信誉:98 说得对啊。。你先outtext,在替换啊。。
      

  3.   

    如果要忽略<  >中的办法,只要对目标字符串进行一下预处理不就行了。先把不必要的去掉,再替换
      

  4.   

    把字符与html标记先分离开来,处理完后再拼接。应该可以吧
      

  5.   

    主要是解决多关键字的替换替换问题。 用循环效率有些低。 用一个正则就好多了。 至于忽略<>的问题到不是很重要
      

  6.   

    仔细看看Duwamish7.0中Viewsource。aspx页面的源代码,你要的功能完全可以实现!太长,没法给你贴出来,给分把
      

  7.   

    private string ReplaceStr(string[] source,string rpstr)
        {
            for (int i = 0; i < source.Length; i++)
            {
                if (rpstr.IndexOf(source[i]) != -1)
                {
                    int start = rpstr.IndexOf(source[i]);
                    if (rpstr.Substring(start, 1) == ">")
                    {
                        int end1 = rpstr.Substring(0, start).LastIndexOf("<a");
                        int end2 = rpstr.Substring(0, start).LastIndexOf("</a");
                        if (end1 > end2)
                        {
                            rpstr = rpstr.Replace(rpstr.Substring(0, start).Substring(end1), "<a>");
                        }
                    }
                    else
                    {
                        rpstr = rpstr.Replace(source[i], "<a>" + source[i]+"</a>");
                    }
                }
            }
            return rpstr;
        }
      

  8.   

    for(int i=0;i<arr.length;i++)
    {
      if(str.IndexOf(arr[i]) != -1)
      {
        string str2="<a>"+arr[i].ToString()+"</a>";
        str.replace(arr[i],str2);
      }
    }
      

  9.   

    string[] 中有 “上海”“北京”“天津”"abc",在这些字符的前后加上特殊符号,再去直接Replace,最后把特殊符号去掉,就不会影响<..>中与你真实不想替换的字符
      

  10.   

    先出了个问题,现在改好了
        private string ReplaceStr(string[] source,string rpstr)
        {
            for (int i = 0; i < source.Length; i++)
            {
                if (rpstr.IndexOf(source[i]) != -1)
                {
                    int start = rpstr.IndexOf(source[i]);
                    if (start > 0)
                    {
                        if (rpstr.Substring(start - 1, 1) == ">")
                        {
                            int end1 = rpstr.Substring(0, start).LastIndexOf("<a");
                            int end2 = rpstr.Substring(0, start).LastIndexOf("</a>");
                            if (end1 > end2)
                            {
                                rpstr = rpstr.Replace(rpstr.Substring(0, start).Substring(end1), "<a>");
                                //Response.Write(rpstr.Substring(0, start-1).Substring(end1)+"<br>");
                            }
                            else
                            {
                                rpstr = rpstr.Replace(source[i], "<a>" + source[i] + "</a>");
                            }
                        }
                        else
                        {
                            rpstr = rpstr.Replace(source[i], "<a>" + source[i] + "</a>");
                        }
                    }
                    else
                    {
                        rpstr = rpstr.Replace(source[i], "<a>" + source[i] + "</a>");
                    }
                }
            }
            return rpstr;
        }
      

  11.   

    运行:
    string[] source=new string[]{"上海","北京","天津","abc"};
    string rpstr="上海在<a href='xxx.aspx'>北京</a>和<a href='xxx.htm'>呵呵</a>天津的<br >南边<a href='#'>abc</a>";
    Response.Write(ReplaceStr(source, rpstr));打印出:
    <a>上海</a>在<a>北京</a>和<a href='xxx.htm'>呵呵</a><a>天津</a>的<br >南边<a>abc</a>
      

  12.   

    Highlighting Multiple Search Keywords in ASP.NET  
     
    http://www.dotnetjunkies.com/Tutorial/195E323C-78F3-4884-A5AA-3A1081AC3B35.dcik
    一个很好的教程和代码下载
      

  13.   

    StringBuilder拼接出替换用正则表达式,然后用另一个正则表达式匹配出非<...>内容,用委托做替换处理StringBuilder拼接正则时,如果英文好办,两侧加\b即可,如果是中文注意包含关系当然,以上仅指<...>不包含“<”和“>”这两个字符的情况,如果包含这两个字符,单纯正则处理起来很吃力了,最好用其它方法处理
      

  14.   

    string str = "上海在北京和天津的<br >南边<a href="#">ddd</a>";
    for(string s in keys)
    if(str.IndexOf(s+">")==-1)
    str = str.Replace(s,"<a>"+s+"</a>")
      

  15.   

    if(str.IndexOf("<"+s)==-1 && str.IndexOf(s+">")==-1)
      

  16.   

    还是孟子 大师提供的方法有效。关键还是RegExp.Replace(sourceStr, new MatchEvaluator(ReplaceKeyWords)); 谢谢 散分