用正则表达式,如何替换<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,……);
<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,……);
解决方案 »
- 怎么设置sql navigator像pl/sql那样自动提示表名
- 新手上路求各位大侠帮助
- 怎么在class A中的一个线程中挂起和继续class B中的线程
- 我用c#2.0写了一个邮件发送小程序,无法进行发送邮件,请问是什么原因?
- 新手问题-关于ComboText用户输入的问题
- .net连接池是不是只支持sqlclient连接?如果用odbc或者oledb连接,是不是没用?
- windows控件 datagrid 显示问题, 高手请进。
- 新手请教关于System.Drawing.Image类的引入问题
- 请教c#当中的特殊字符问题
- c#里面有没有和c++中shellexecute()一样功能的函数?就是在自己的程序中启动另一个进程的方法。
- 问个小问题~~~~~~~~~~~~~~~
- 在C#中如何让用户选择驱动器,目录和文件.
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();
}
}
比如我原来的地址还可能是:
<img border="0" src="./images/top.gif" width="760" height="120">
其中src地址是固定的,其它的就不固定了。
<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">
(?<=<(?: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(后注):记得结帖 不要浪费我的感情
如果你要修改替换的话请使用文本的replace
不要使用regex的replace
<img src="../template/news/images/left.gif" border="0">
PAGE和NEWS怎么判断?
上面的会把所有的img开头的标签中的地址替换
这里有些问题,没有把src的后面那个"号包括进去哦。
src = "……"
怎么感觉这些都是只能替换一个的,如果一堆需要挨个替换,而且都不一样,我看上面的这些表达式都做不到!
你试了么?
@"(<img.+src="").+/([^>]+>)";
这里有些问题,没有把src的后面那个"号包括进去哦。
src = "……"
============
用我的
mobydick(敌伯威|我排著队拿著爱的号码牌) ( ) 信誉:100 Blog 2006-10-19 09:45:00 得分: 0
yourStr = Regex.Replace(yourStr, "(<img.+src=\").+/([^>]+>)", "$1"+这里是替换后的地址+"$2");
上面的会把所有的img开头的标签中的地址替换
{
incomeStr = incomeStr.Replace(reg.Group["start"] + reg.Matches[i] + reg.Group["end"] , reg.Group["start"] + (你想修改的内容) + reg.Group["end"])
}以上是大概意思 代码是手写的不知道有没有错 自己按着这个思路修改下就好
我一直就是在用你的咯。
源串:
<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>
只是这样的表达式只能匹配部分情况没法完全解析
例如<img src="XXXX">
src后面的等号前后可能存在空格 你必须分析这种可能性
包围XXXX的可能是 单引号 双引号 或 空 你必须分析这种可能性
还有其他情况
如果使用 regex.replace 我试过给
<img src="XXXX"> 加个HTTP://
match出来的结果都没问题
但用 regex.replace 之后变成 <img srcHTTP://="HTTP://XXXX">了无奈之下只好用普通文本的replace进行替换
因为特殊原因,我必须使用regex.replace。
我在做一个自助建站系统,请大家帮助一下。
做完后,我可以赠送源码的。
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();
}
}
===========
没错,可以替换。
<img border=""0"" src=""./contact/images/top.gif"" width=""760"" height=""120"">
</td>
</tr>";
找到原因了,如果<img ……>后面的</td>在同一行的话,就会不正常,如果在另外一行,结果是正确的。这样的问题怎么解决?谢谢。
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/");
regexStr = "(<img[^>]+src=\\\")[^\\\"]+/([^>]+>)";
别的不变
我重新开另外一个贴子,请接分,谢谢。。
http://community.csdn.net/Expert/topic/5094/5094322.xml?temp=.2270777