C#正则表达式提取HTML中IMG标签的SRC地址

一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事。由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易。于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签。
我们可以从 HTML 标签的格式去想应该怎么建这个正则表达式。首先要想一下 img 标签有几种写法,忽略大小写不看的话,下面列出 img 标签可能出现的几种情况。
<img> <img/> <img src=/> 
这一些标签不用考虑,因为没有图片资源地址。 
<img src = /images/pic.jpg/ > <img src =" /images/pic.jpg" > <img src= ‘/images/pic.jpg ‘ / >
这一些标签都有图片资源地址,另外还有一个特点就是有引号对,可能为单引号,也可能为双引号。因为不需要同时匹配引号对,所以正则表达式可以这么写:@"<img\s*src\s*=\s*[""‘]?\s*(?[^\s""‘<>]*)\s*/?\s*>"
<img width="320" height="240" src=/images/pic.jpg onclick="window.open(‘/images/pic.jpg‘)">
因为 img 和 src 之间可能会有其他的参数,所以“<img”要有个单词结束,比如说不能是“<imgabc”,同样 src 前面也是一样,使用单词结束符“\b”有一个好处就是省去了表示空格的“\s*”。另外由于 img 标签中不可以出现“<”、“>”这样的符号,所以要改写前面的正则表达式:@"<img\b[^<>]*?\bsrc\s*=\s*[""‘]?\s*(?<imgUrl>[^\s""‘<>]*)[^<>]*?/?\s*>"
<img width="320" height="240" src = " 
/images/pic.jpg" /> 
像这种可能会用回车符折行的问题有时候会出现,所以在有空格分开的地方要包含回车换行和 TAB 字符,另外在图片地址中不能出现空格、TAB、回车和换行字符。
所以上面的正则表达式可以改成:@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""‘]?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""‘<>]*)[^<>]*?/?[\s\t\r\n]*>"
下面写出取得HTML中所有图片地址的静态方法。

 1 /// <summary>
 2 /// 取得HTML中所有图片的 URL。
 3 /// </summary>
 4 /// <param name="sHtmlText">HTML代码</param>
 5 /// <returns>图片的URL列表</returns>
 6 public static string[] GetHtmlImageUrlList(string sHtmlText)
 7 {
 8   // 定义正则表达式用来匹配 img 标签
 9   Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""‘]?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""‘<>]*)[^<>]*?/?[\s\t\r\n]*>",   RegexOptions.IgnoreCase);
10
11   // 搜索匹配的字符串
12   MatchCollection matches = regImg.Matches(sHtmlText);
13   int i = 0;
14   string[] sUrlList = new string[matches.Count];
15
16   // 取得匹配项列表
17   foreach (Match match in matches)
18   sUrlList[i++] = match.Groups["imgUrl"].Value;
19   return sUrlList;
20 }  

转  http://blog.csdn.net/smeller/article/details/7108502

时间: 2024-12-25 21:02:34

C#正则表达式提取HTML中IMG标签的SRC地址的相关文章

C#正则表达式提取HTML中IMG标签中的SRC地址

百度到的一个,这里就直接贴了 http://blog.csdn.net/smeller/article/details/7108502#comments 一般来说一个 HTML 文档有很多标签,比如“<html>”.“<body>”.“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事.由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易.于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 im

IOS使用正则表达式去掉html中的标签元素,获得纯文本

IOS使用正则表达式去掉html中的标签元素,获得纯文本 content是根据网址获得的网页源码字符串 NSRegularExpression *regularExpretion=[NSRegularExpression regularExpressionWithPattern:@"<[^>]*>|\n"                                                                                   

web前端入门到实战:HTML中img标签的src属性绝对路径问题解决办法,完全解决!

HTML中img标签的src属性绝对路径问题解决办法,完全解决 需求:有时候自己的项目img的src路径需要用到本地某文件夹下的图片,而不是直接使用项目根目录下的图片. 场景:eclipse,tomcat,html,img,src,java 注意:不需要寻找tomcat真实路径下的server.xml去修改,这个地方不需要修改. 解决办法:1.在eclipse中找到你的项目发布的tomcat服务器,然后找到左侧Servers下对应的你的Tomcat服务器中的server.xml文件,如下图所示:

java 获取HTML文本IMG标签的src地址

public static void main(String[] args) { String htmlText = "<p>的风格发的,多大的<img src=\"https://123.10.3.22:8080/File/uploadPictrue/20150917151201008.png\" /><img src=\"../File/uploadPic/2015/9/17/15/1118.png\" /><

爬虫(四):正则表达式(提取str中网址)

3.采用beatifulsoup与re正则表达式一起使,提取html中的一些href的链接 http://cuiqingcai.com/1319.html 4.如何利用正则表达式边界匹配

C#正则表达式提取文本中以逗号间隔的数据

使用正则表达式提取文本数据到内存是很方便的技术,下面通过一个例子介绍一下如何使用正则表达式提取文本 文本中内容格式 1,2,3,4,5 2,2,2,2,2 3,3,3,3,3 C#代码如下 public List<List<string>> GetDataCSV(string path) {         string pattern = @"\d+"; List<List<string>> data = new List<Lis

python 正则表达式 提取网页中标签的中文

转载请注明出处 http://www.cnblogs.com/pengwang57/. >>> p= re.compile(r'\<div class="comment-content comment-content_new"\>([^x00-xff]*)\<\/div\>') >>> text='<div class="comment-content comment-content_new">

php正则表达式提取img alt/title标签并替换

有时我们需要对富文本编辑器中的img标签进行必要的处理以满足网站自身的需要,比如:根据站点关键词对页面内img的alt标签设定关键词,以下为提取并替换alt/title标签内容的正则: $title = "需要替换的内容..."$pattern= "/<img.*?src=[\"|\'](.*?)[\"|\'].*?>/"; $replace = '<img src="$1" alt="'.$tit

基础算法7:使用正则提取网页中a标签的链接和标题

先放出测试代码,然后再对几个关键点进行简单解释 package test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test1 { public static void main(String[] args) { String str1 = "<a href=\"http://www.zifangsky.cn/2015/10/hello-world/\" t