大家好,我有个字符串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
<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
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");
如果是有参数的链接,如laws.aspx?category=17,则替换为页面名称加参数,变成laws17.html
这个还是没有实现的啊
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"; }
朋友,谢谢,但是还是没有实现第二条要求。
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"; }
?后面的参数名不确定,可能是test.aspx?id=1,也可能是anypage.aspx?cateid=2