string=" <p class=\"topiccontent\"> ....,于是找了一家补胎店给看了看。<br><br><img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"\"><br>补胎店给看了后,说好解决<br><img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"\"> .....</p>"
  现在想通过C#正则实现2个功能:1,将上面的图片标签通过正则替换成形如:<a href="/uploads/app/pic/s_20110625055343396094.JPG"><img src="/uploads/app/pic/s_20110625055343396094.JPG" alt="" width="300px"></a>。这样做的目的希望文章中点击小图是浮动弹出大图。
2,将所有图片变成1中所示。求解正则和替换详细内容,谢谢各位老师

解决方案 »

  1.   

    不知道是不是这个意思:
    string s = "<p class=\"topiccontent\"> ....,于是找了一家补胎店给看了看。<br><br><img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"\"><br>补胎店给看了后,说好解决<br><img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"\"> .....</p>";
    string r = Regex.Replace(s, @"<img src=""([^>""]+?)"" alt="""">", @"<a href=""$1""><img src=""$1"" alt="" width=""300px""></a>");
    Response.Write(Server.HtmlEncode(r));
      

  2.   

            string str = @"<p class=""topiccontent""> ....,于是找了一家补胎店给看了看。<br><br>
               <img src=""/uploads/app/pic/s_20110625055343396094.JPG"" alt=""""><br>补胎店给看了后,说好解决<br><img src=""/uploads/app/pic/s_20110625055343395211.JPG"" alt=""""> .....</p>";
            string result = Regex.Replace(str, @"<img[^>]*?src=(['""\s]?)([^'""\s]+)\1[^>]*?>", "<a href=\"$2\">$0</a>");
            Response.Write(result);
    /*
    <p class="topiccontent"> ....,于是找了一家补胎店给看了看。<br><br>
               <a href="/uploads/app/pic/s_20110625055343396094.JPG"><img src="/uploads/app/pic/s_20110625055343396094.JPG" alt=""></a><br>补胎店给看了后,说好解决<br><a href="/uploads/app/pic/s_20110625055343395211.JPG"><img src="/uploads/app/pic/s_20110625055343395211.JPG" alt=""></a> .....</p>
    */
      

  3.   

    这样:
    string s = "<p class=\"topiccontent\"> ....,于是找了一家补胎店给看了看。<br><br><img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"\"><br>补胎店给看了后,说好解决<br><img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"\"> .....</p>";
    string r = Regex.Replace(s, @"(?<=<p class=""topiccontent"">.+?)<img src=""([^>""]+?)"" alt="""">(?=.+?</p>)", @"<a href=""$1""><img src=""$1"" alt="" width=""300px""></a>");
    Response.Write(Server.HtmlEncode(r));
      

  4.   

    没注意看还有个限制大小。
            string str = @"<p class=""topiccontent""> ....,于是找了一家补胎店给看了看。<br><br>
               <img src=""/uploads/app/pic/s_20110625055343396094.JPG"" alt=""""><br>补胎店给看了后,说好解决<br><img src=""/uploads/app/pic/s_20110625055343395211.JPG"" alt=""""> .....</p>";
            string result = Regex.Replace(str, @"<img[^>]*?src=(['""\s]?)([^'""\s]+)\1[^>]*?>", "<a href=\"$2\"><img src=\"$2\" alt=\"\" width=\"300px\" /></a>");
            Response.Write(result);
    /*
    <p class="topiccontent"> ....,于是找了一家补胎店给看了看。<br><br>
               <a href="/uploads/app/pic/s_20110625055343396094.JPG"><img src="/uploads/app/pic/s_20110625055343396094.JPG" alt="" width="300px" /></a><br>补胎店给看了后,说好解决<br><a href="/uploads/app/pic/s_20110625055343395211.JPG"><img src="/uploads/app/pic/s_20110625055343395211.JPG" alt="" width="300px" /></a> .....</p>
    */
      

  5.   

    string s = "<p class=\"topiccontent\"> ....,于是找了一家补胎店给看了看。<br><br><img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"\"><br>补胎店给看了后,说好解决<br><img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"\"> .....</p>";
    string r = Regex.Replace(s, @"(?<=<p class=""topiccontent"">.+?)<img src=""([^>""]+?)"" alt="""">(?=.+?</p>)", @"<a href=""$1""><img src=""$1"" alt="""" width=""300px""></a>");
    Response.Write(Server.HtmlEncode(r));
    输出:
    <p class="topiccontent"> ....,于是找了一家补胎店给看了看。<br><br><a href="/uploads/app/pic/s_20110625055343396094.JPG"><img src="/uploads/app/pic/s_20110625055343396094.JPG" alt="" width="300px"></a><br>补胎店给看了后,说好解决<br><a href="/uploads/app/pic/s_20110625055343395211.JPG"><img src="/uploads/app/pic/s_20110625055343395211.JPG" alt="" width="300px"></a> .....</p>
    哈哈~~
      

  6.   

    下面的,你看看对不对string str="<p class=\"topiccontent\"> ....,于是找了一家补胎店给看了看。"+
                   "<br><br><img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"\"><br>补胎店给看了后,说好解决<br><img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"\"> .....</p>";
               
               Regex regex = new Regex(@"(?<=(<\w+\s+[^>]+>))");
               MatchCollection mc=regex.Matches(str);
               foreach (Match v in mc)
                   Console.WriteLine(v.Groups[1]);输出结果是这样的:
    "<p class=\"topiccontent\">
    <img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"\">
    <img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"\">
      

  7.   

    刚才验证了4楼,有个问题:其中alt的内容应该要继承(不应该为空)。希望再修改下。谢谢!
      

  8.   

            string str = @"<p class=""topiccontent""> ....,于是找了一家补胎店给看了看。<br><br>
               <img src=""/uploads/app/pic/s_20110625055343396094.JPG"" alt=""aa""><br>补胎店给看了后,说好解决<br><img src=""/uploads/app/pic/s_20110625055343395211.JPG"" alt=""bb""> .....</p>";
            string result = Regex.Replace(str, @"<img[^>]*?src=(['""\s]?)([^'""\s]+)\1[^>]*?alt=(['""\s]?)([^'""\s]+)\3[^>]*?>", "<a href=\"$2\"><img src=\"$2\" alt=\"$4\" width=\"300px\" /></a>");
            Response.Write(result);
    /*
    <p class="topiccontent"> ....,于是找了一家补胎店给看了看。<br><br>
               <a href="/uploads/app/pic/s_20110625055343396094.JPG"><img src="/uploads/app/pic/s_20110625055343396094.JPG" alt="aa" width="300px" /></a><br>补胎店给看了后,说好解决<br><a href="/uploads/app/pic/s_20110625055343395211.JPG"><img src="/uploads/app/pic/s_20110625055343395211.JPG" alt="bb" width="300px" /></a> .....</p>
    */
      

  9.   

    string s = "<p class=\"topiccontent\"> ....,于是找了一家补胎店给看了看。<br><br><img src=\"/uploads/app/pic/s_20110625055343396094.JPG\" alt=\"333\"><br>补胎店给看了后,说好解决<br><img src=\"/uploads/app/pic/s_20110625055343395211.JPG\" alt=\"abc\"> .....</p>";
            string r = Regex.Replace(s, @"(?<=<p class=""topiccontent"">.+?)<img src=""([^>""]+?)"" alt=""([^""]*?)"">(?=.+?</p>)", @"<a href=""$1""><img src=""$1"" alt=""$2"" width=""300px""></a>");
            Response.Write(Server.HtmlEncode(r));
      

  10.   

                string strContent = context;
              //  strContent = Regex.Replace(strContent, @"<img src=""([^>""]+?)"" alt=""([^""]*?)"">", @"<a href=""$1""><img alt=""$2"" src=""$1"" width=""550px""></a>", RegexOptions.IgnoreCase); 一, 无法匹配替换
              //  strContent = Regex.Replace(strContent, @"<img[^>]*?src=(['""\s]?)([^'""\s]+)\1[^>]*?alt=(['""\s]?)([^'""\s]+)\3[^>]*?>", "<a href=\"$2\"><img src=\"$2\" alt=\"$4\" width=\"550px\" /></a>", RegexOptions.IgnoreCase); 二, 无法匹配替换
                strContent = Regex.Replace(strContent, @"<img[^>]*?src=(['""\s]?)([^'""\s]+)\1[^>]*?>", "<a href=\"$2\"><img src=\"$2\" alt=\"\" width=\"300px\" /></a>", RegexOptions.IgnoreCase);  三,可以
                return strContent;
    感谢。用4楼的即上面三的正则可以正确匹配替换。但用一和二都无法匹配,请问什么原因。
      

  11.   

    一,二和三的差别在一个alt,有可能你要匹配的图片有的没有alt。
      

  12.   

    这样试试            string str = @"<p class=""topiccontent""> ....,于是找了一家补胎店给看了看。<br><br>
               <img src=""/uploads/app/pic/s_20110625055343396094.JPG""><br>补胎店给看了后,说好解决<br><img src=""/uploads/app/pic/s_20110625055343395211.JPG"" alt=""bb""> .....</p>";
                string result = Regex.Replace(str, @"<img[^>]*?src=(['""\s]?)([^'""\s]+)\1[^>]*?(?:alt=(['""\s]?)([^'""\s]+)\3[^>]*?)?>", "<a href=\"$2\"><img src=\"$2\" alt=\"$4\" width=\"300px\" /></a>");
      

  13.   

    感谢各位。
    huangwenquan123 最后的办法解决了问题,分理应多些。