用正则表达式,如何替换<img src="……">中的src地址?三张源图片地址分别为:
<img src="./contact/images/top.jpg" border="0">
<img src="./about/images/left.gif" border="0">
<img src="./case/images/left.gif" border="0">现在分别同时替换成:
<img src="../template/page/images/top.jpg" border="0">
<img src="../template/page/images/left.gif" border="0">
<img src="../template/news/images/left.gif" border="0">怎么样才能完成?谢谢。
RegExPattern = @"……";//替换图片地址
Regex htmlRegex = new Regex(RegExPattern, RegexOptions.IgnoreCase|RegexOptions.Compiled);
msg = htmlRegex.Replace(RegExString,……);

解决方案 »

  1.   

    yourStr = Regex.Replace(yourStr, "<img\\s+src=\".+/(\\S+\\.\\S+)\"", "<img src=\"../template/page/images/$1\"");
      

  2.   

    using System;
    using System.Collections;
    using System.Text.RegularExpressions;public class MyClass
    {
    public static void Main()
    {
    String input = "<img src=\"./contact/images/top.jpg\" border=\"0\"><img src=\"./about/images/left.gif\" border=\"0\"><img src=\"../template/news/images/left.gif\" border=\"0\">";
    String result;
    //<img src="../template/page/images/top.jpg" border="0">
    Regex r = new Regex("(?<=<img\\s+src=\")\\./\\w+(?=/images/\\w+\\.\\w+\"\\s+border=\"0\">)",
    RegexOptions.Multiline|RegexOptions.IgnoreCase);
    result = r.Replace(input,"../template",-1);

    Console.WriteLine("结果为\n{0}",result);
    Console.ReadLine();
    }

    }
      

  3.   

    不通用啊,
    比如我原来的地址还可能是:
    <img border="0" src="./images/top.gif" width="760" height="120">
    其中src地址是固定的,其它的就不固定了。
      

  4.   

    三张源图片地址分别为:
    <img border="0" src="./contact/images/top.jpg" width="760" height="120">
    <img src="./about/images/left.gif" border="0" width="120" height="120">
    <img border="0" src="./case/images/left.gif" width="340" height="120">
      

  5.   

    (?<=<(?:XXX)[^>]*(?<start>(?:xxx)(?:\s*=\s*(?<end>["']?))))(?:[^\s"'>]*)用上面的表达式 是我自己写的用于获取指定标签的指定属性的表达式 按你的需求改一下就可以 下面是改好的
    (?<=<(?:img)[^>]*(?<start>(?:src)(?:\s*=\s*(?<end>["']?))))(?:[^\s"'>]*)说明:
    XXX 是你所需要查找的标签
    xxx 是你所需要查找的指定属性
    match 获取的是你的属性值
    group("start") 获取的是 属性的名称 + 等号 + 包围属性的 双引号 单引号 或空
    group("end") 包围属性的 双引号 单引号 或空这个表达式可以自适应个种不同的情况例子:
    1:<img src ='./case/images/left.gif' border="0">
    2:<img src= "./case/images/left.gif" border="0">
    3:<img src = "./case/images/left.gif" border="0">
    4:<img src=./case/images/left.gif border="0">获取:
    match到的东西全部是 ./case/images/left.gif
    1:
    group("start")是 src ='
    group("end")是 '
    2:
    group("start")是 src= "
    group("end")是 "
    3:
    group("start")是 src = "
    group("end")是 "
    4:
    group("start")是 src=
    group("end")是 空
    PS(后注):记得结帖 不要浪费我的感情
      

  6.   

    忘了说明
    如果你要修改替换的话请使用文本的replace
    不要使用regex的replace
      

  7.   

    说实话, 按照我的理解 用程序很难完美实现你的要求,不如自己手动替换(ctrl+F)
      

  8.   

    <img src="../template/page/images/left.gif" border="0">
    <img src="../template/news/images/left.gif" border="0">
    PAGE和NEWS怎么判断?
      

  9.   

    yourStr = Regex.Replace(yourStr, "(<img.+src=\").+/([^>]+>)", "$1"+这里是替换后的地址+"$2");
    上面的会把所有的img开头的标签中的地址替换
      

  10.   

    @"(<img.+src="").+/([^>]+>)";
    这里有些问题,没有把src的后面那个"号包括进去哦。
    src = "……"
      

  11.   

    jedliu(21世纪什么最贵? 人才!) ( ) 信誉:98    Blog  2006-10-19 09:56:00  得分: 0  
     
     
       怎么感觉这些都是只能替换一个的,如果一堆需要挨个替换,而且都不一样,我看上面的这些表达式都做不到!
      
     
    你试了么?
      

  12.   

    wtoeb(FAQC.COM) ( ) 信誉:96    Blog  2006-10-19 10:04:00  得分: 0  
     
     
       @"(<img.+src="").+/([^>]+>)";
    这里有些问题,没有把src的后面那个"号包括进去哦。
    src = "……"
      
     ============
    用我的
     mobydick(敌伯威|我排著队拿著爱的号码牌) ( ) 信誉:100    Blog  2006-10-19 09:45:00  得分: 0  
     
     
       yourStr = Regex.Replace(yourStr, "(<img.+src=\").+/([^>]+>)", "$1"+这里是替换后的地址+"$2");
    上面的会把所有的img开头的标签中的地址替换
      
     
      

  13.   

    regex="(?<=<(?:img)[^>]*(?<start>(?:src)(?:\\s*=\\s*(?<end>[\"']?))))(?:[^\\s\"'>]*)"Regex reg = new Regex(regex, System.Text.RegularExpressions.RegexOptions.IgnoreCase);for(i=0;i<reg.Matches.Count;i++)
    {
    incomeStr = incomeStr.Replace(reg.Group["start"] + reg.Matches[i] + reg.Group["end"] , reg.Group["start"] + (你想修改的内容) + reg.Group["end"])
    }以上是大概意思 代码是手写的不知道有没有错 自己按着这个思路修改下就好
      

  14.   

    TO:mobydick(敌伯威|我排著队拿著爱的号码牌)
    我一直就是在用你的咯。
    源串:
    <tr><td height="100" align="center">
    <img border="0" src="./contact/images/top.gif" width="760" height="120">
    </td>
    </tr>
    目标串:
    <tr><td height="100" align="center">
    <img border="0" src="./template/page/images/top.gif" width="760" height="120">
    </td>
    </tr>ReplaceString = "../template/";
    RegExPattern = "(<img.+src=\").+/([^>]+>)";
    ReplaceString = @"$1"+ReplaceString+"$2";
    Regex.Replace(yourStr,RegExPattern,ReplaceString);结果得到:
    <img border="0" src="../template/td>
      

  15.   

    另外说明一下 不是我不用 regex.replace
    只是这样的表达式只能匹配部分情况没法完全解析
    例如<img src="XXXX">
    src后面的等号前后可能存在空格 你必须分析这种可能性
    包围XXXX的可能是 单引号 双引号 或 空 你必须分析这种可能性
    还有其他情况
    如果使用 regex.replace 我试过给
    <img src="XXXX"> 加个HTTP://
    match出来的结果都没问题
    但用 regex.replace 之后变成 <img srcHTTP://="HTTP://XXXX">了无奈之下只好用普通文本的replace进行替换
      

  16.   

    哈哈,谢谢gzdiablo()。
    因为特殊原因,我必须使用regex.replace。
    我在做一个自助建站系统,请大家帮助一下。
    做完后,我可以赠送源码的。
      

  17.   

    using System;
    using System.Collections;
    using System.Text.RegularExpressions;public class MyClass
    {
        public static void Main()
        {
            string str = @"    <tr><td height=""100"" align=""center"">
        <img border=""0"" src=""./contact/images/top.gif"" width=""760"" height=""120"">
        </td>
        </tr>";        Console.WriteLine("源:");
            Console.WriteLine(str);
            string ReplaceString = "../template/";
            string RegExPattern = "(<img.+src=\").+/([^>]+>)";
            ReplaceString = @"$1"+ReplaceString+"$2";
            str = Regex.Replace(str,RegExPattern,ReplaceString);        Console.WriteLine("目标:");
            Console.WriteLine(str);        Console.ReadLine();
        }
    }
    ===========
    没错,可以替换。
      

  18.   

    真是奇怪了,使用DOS控制台输出是完全正常的,但是一放在web上就得不到同样的结果。
      

  19.   

    string str = @"    <tr><td height=""100"" align=""center"">
        <img border=""0"" src=""./contact/images/top.gif"" width=""760"" height=""120"">
        </td>
        </tr>";
    找到原因了,如果<img ……>后面的</td>在同一行的话,就会不正常,如果在另外一行,结果是正确的。这样的问题怎么解决?谢谢。
      

  20.   

    还是我给你个吧
    string a=@"<img border=""0"" src=""./contact/images/top.gif"" width=""760"" height=""120""></td>";
    Regex reg=new Regex("(?<=.*src=\")[^<]+/(?=.+>)");
    a=reg.Replace(a,"../template/");
      

  21.   

    正则式换成这个
    regexStr = "(<img[^>]+src=\\\")[^\\\"]+/([^>]+>)";
    别的不变
      

  22.   

    TO:gzdiablo()、cancerser
    我重新开另外一个贴子,请接分,谢谢。。
    http://community.csdn.net/Expert/topic/5094/5094322.xml?temp=.2270777