大家好,我有个字符串string result,内容是一些html:        <ul id="sub7" style="display:none">
    
            <li><a href="laws.aspx?category=17">海关商检</a><span>|</span></li>
        
            <li><a href="laws.aspx?category=18">劳动</a><span>|</span></li>            <li><a href="Default.aspx">劳动</a><span>|</span></li>
现在要整站静态,所以要把内容里面的链接全部改成静态页的链接。
现在我想把上面的链接替换,规则是:
如果没有参数的链接,如Default.aspx,直接替换为Default.html
如果是有参数的链接,如laws.aspx?category=17,则替换为页面名称加参数,变成laws17.html

解决方案 »

  1.   


    string strHtml = @"<ul id=""sub7"" style=""display:none""> 
        
                <li> <a href=""laws.aspx?category=17"">海关商检 </a> <span>| </span> </li> 
            
                <li> <a href=""laws.aspx?category=18"">劳动 </a> <span>| </span> </li>             <li> <a href=""Default.aspx"">劳动 </a> <span>| </span> </li> ";
                    Regex re = new Regex(@"(?i)(?<=<a[^>]*?(?=href)href=""[^\.]*\.)aspx");
                    strHtml = re.Replace(strHtml, "html");
      

  2.   

    朋友,你这个只是实现了第一个要求,
    如果是有参数的链接,如laws.aspx?category=17,则替换为页面名称加参数,变成laws17.html
    这个还是没有实现的啊
      

  3.   

    不知道你用过UR重写,如果服务器支持可以用重写URL的方法实现你要的结果
      

  4.   


    string strHtml = @"<ul id=""sub7"" style=""display:none""> 
        
                <li> <a href=""laws.aspx?category=17"">海关商检 </a> <span>| </span> </li> 
            
                <li> <a href=""laws.aspx?category=18"">劳动 </a> <span>| </span> </li>             <li> <a href=""Default.aspx"">劳动 </a> <span>| </span> </li> ";
                    Regex re = new Regex(@"(?i)(?<=<a\s*href="")(?<file>[^\.]*)\.aspx(\?category=(?<num>[^""\s]*))*");
                    strHtml = re.Replace(strHtml, new MatchEvaluator( SetUrl));private string SetUrl(Match mc)
            {
                string strfile = mc.Groups["file"].Value;
                string strnum = mc.Groups["num"].Value;
                return strfile + strnum + ".html";         }
      

  5.   


    朋友,谢谢,但是还是没有实现第二条要求。
            static void Main(string[] args)
            {
                string result = "<a href=\"asdfsdfa.aspx?caid=1\">Asd</a>";
                Regex re = new Regex(@"(?i)(?<=<a\s*href="")(?<file>[^\.]*)\.aspx(\?category=(?<num>[^""\s]*))*");
                result = re.Replace(result, new MatchEvaluator(SetUrl));
                Console.Write(result);
                //结果是:asdfsdfa.html?caid=1
                  //我要求的是asdfsdfa1.htm
            }
            private static string SetUrl(Match mc)
            {
                string strfile = mc.Groups["file"].Value;
                string strnum = mc.Groups["num"].Value;
                return strfile + strnum + ".html";        }
      

  6.   

    ?后面的为别的参数名还是为固定的category?先说清楚你的需求你的需求貌似没有指明
      

  7.   


    ?后面的参数名不确定,可能是test.aspx?id=1,也可能是anypage.aspx?cateid=2
      

  8.   

    substring & replace函数可实现你要求,自己查一下用法吧
      

  9.   

    正则替换如下:Regex re = new Regex(@"(?i)(?<=<a\s*href="")(?<file>[^\.]*)\.aspx(\?[^=]*=(?<num>[^""\s]*))*");