C#处理html标签一些正则表达式整理收集

1:取得A 标签中的内容或者 url title

<a href='javascript:open_window("http://xx/F/F987K71CHH3JEBIG788IQ2BTRSULYAIY2PFXEXGBB7Q5614QM1-05893?func=service&doc_number=007838178&line_number=0011&service_type=TAG");'>岛上书店&nbsp;[专著]&nbsp;=&nbsp;The storied life of A.J.Fikry</a>
(?is)<a\s+href=(['"])(?:(?![<>]|\1).)+\1>(?<text>(?:(?!</?a).)+)
(?is)(?<=<a\s+href=[^>]+>)((?!</?a).)+
<a\s*[^>]*>([\s\S]+?)</a>

@"(?is)<a[^>]*?id=""rptData_lnkQuerySub_0""[^>]*?>([\s\S].*?)</a>"
//替换掉A标签
var billno = Regex.Replace(item.WorldexSinotrans[1], @"<a(?:(?!href=).)*href=(['""]?)(?<url>[^""'\s>]*)\1[^>]*>(?<text>(?:(?!</a>).)*)</a>", "", RegexOptions.None);

var repA = Regex.Matches(repImg, @"<A\s*[^>]*>([\s\S]+?)</A>")
    .Cast<Match>().Select(mx => mx.Groups[0].Value.Trim().TrimStart().TrimEnd()).ToList();//Groups根据情况取0/1

2:替换 html 中有img情况

<img alt="Link" src="http://xxx/exlibris/aleph/u20_1/alephe/www_f_chi/icon/f-separator.gif" border="0">
var repImg = Regex.Replace(value[0].ToString(), @"<img\s+[^>]*\s*src\s*=\s*([']?)(?<url>\S+)'?[^>]*>", "", RegexOptions.None);

3:取得form 中的url action 等值

<form method=get name=form1 action="http://xxx/F/7I82M4CLHLI12T96I5C26VMVRFAGUTHS2181BYCG6TLYDRPHHR-17822" οnsubmit="return presearch(this);">
var resultAction = Regex.Matches(GetReturnHtml(Url), @"<form method=get name=form1\s*[^>]*action=""([\s\S]+?)""[^>]*?>") 
//@"<form method=get name=form1\s*[^>]*action=""([\s\S]+?)"">.*</form>")
.Cast<Match>().Select(mx => mx.Groups[1].Value.TrimStart().TrimEnd()).ToList();

4:直接获取table下面所有的tr td

<table id="td" width="90%" style="margin:0 auto;" border="0" cellspacing="2">
<tr>
<td style="background:#fff;" class=td1 align=left >
     20160530d2016&nbsp;em&nbsp;y0chiy50&nbsp;ea
</td>
</tr>
</table>
var tableid = @"id=""td""";
Regex reg = new Regex("(?is)(?<=<table[^>]*?" + tableid + "[^>]*?>(?:(?!</?table).)*)(?is)<tr[^>]*?>(?:\\s*<td[^>]*?class=td1[^>]*?>(.*?)</td>)*\\s*</tr>");
@"(?is)<table[^>]*?" + regexTableParm + "[^>]*?>([\\s\\S].*?)</table>"

5:直接获取tr里面的内容

 var compare = Regex.Match(mTable.Value, "(?is)<tr " + classParm + ">(?:\\s*<td[^>]*>(.*?)</td>)*\\s*((?!</tr>).)*").Groups[0].Value.Trim();//.Groups[1].Value.Trim();

6:直接获取td里面的内容

<td style="background:#fff;" class=td1 align=left >
     20160530d2016&nbsp;em&nbsp;y0chiy50&nbsp;ea
</td>
var value = Regex.Matches(m.Value, @"(?<=<td[^>]*?class=td1 align=left[^>]*?>)([\s\S]+?)(?=</td>)")
                         .Cast<Match>().Select(mx => mx.Groups[0].Value.Trim().TrimStart().TrimEnd()).ToList();
//(\s+scope=[^>]+)?(\s+class=[^>]+)?>)    匹配td 里面内容class
var td = Regex.Matches(m.Value, @"(?<=<td(\s+scope=[^>]+)?(\s+class=[^>]+)?>)([\s\S]+?)(?=</td>)")
// @"(?<=<td>)\r\n\s+[\s\S]*?\r\n\s+(?=</td>)")
                             .Cast<Match>().Select(mx => mx.Groups[0].Value.Trim().TrimStart().TrimEnd()).ToList();
@"(?is)(?<=<td(\s+align=[^>]+)?>).*?(?=\s*</td)"

@"(?is)(?<=<td(\s+class=[^>]+)?>).*?(?=\s*</td)"

7:里面有font字体的

var td = Regex.Matches(m.Value, @"(?<=<font(\s+color=[^>]+)?>).*?(?=</font>)").Cast<Match>().Select(mx => mx.Groups[0].Value).ToList();

8:获取html页面中隐藏hidden

var result = Regex.Matches(response.Content.ReadAsStringAsync().Result, @"<input type=""hidden""[^>]*?.*?\/>")
                                    .Cast<Match>().Select(mx => mx.Groups[0].Value.TrimStart().TrimEnd()).ToList();

//获取 隐藏域中的 id  value
//var reg = @"(?isn)<input((?!([<>]|id=)).)+id=""(?<id>[^""<>]+)""[^<>]*?value=""(?<value>[^<>""]*)""";
//    var keyvalue = Regex.Match(item, reg);
//returnHidden.Add(keyvalue.Groups[1].Value, keyvalue.Groups[2].Value);
var key = Regex.Match(item, @"<input type=""hidden""[^>]*?[^>]+?id=""([\s\S]+?)""[^>]+>").Groups[1].Value;
var value = Regex.Match(item, @"<input type=""hidden""[^>]*?[^>]+?value=""([\s\S]+?)""[^>]+>").Groups[1].Value;

9:获取html页面中body里面的内容

var resultStr = Regex.Matches(DelHTML(retString), @"(?is)<body[^>]*?>([\s\S].*?)</body>")
                                            .Cast<Match>().Select(mx => mx.Groups[0].Value.TrimStart().TrimEnd()).ToList();

在C#中使用正则表达式自动匹配并获取所需要的数据

正则表达式能根据设置匹配各种数据(比如:e-mail地址,电话号码,身份中号码等等)。正则表达式功能强大,使用灵活,C#,Java,JavaScript等多种语言都支持正则表达式。在互联网上“抓取数据”更是少不了使用正则表达式。今天我要说的是在C#中使用正则表达式自动匹配并获取所需要的数据。

从下面是某个IP查询网站返回查询结果的一个部分(字符串),现在就是要从这个字符串中获取“查询结果1:”后面的“北京市 网通”。

<td align ="center">
<ul><li> 查询结果1:北京市 网通 </li>
<li> 查询结果2:北京市 网通 </li>
<li> 查询结果3:北京市 网通 </li>
</ul >
</td >

C#相关代码如下:

string  srcString  = "<td align=\"center\"><ul><li>查询结果1:北京市 网通</li><li>查询结果2:北京市 网通</li><li>查询结果3:北京市 网通</li></ul></td> " ;
// 匹配 "<li>查询结果1:" 与 "</li>" 之间的所有字符的正则表达式
string  regexStr  =   " <li>查询结果1:(?<key>.*?)</li> " ;
Regex r  =   new  Regex(regexStr, RegexOptions.None);
Match mc  =  r.Match(srcString);
string dataStr  = mc.Groups[ " key " ].Value;

说明:
这里最关键的是设置正则表达式: " <li>查询结果1:(?<key>.*?)</li> "。

字符描述
<key>根据key获取由正则表达式匹配的值。
.匹配除 “\n” 之外的任何单个字符。
*匹配前面的子表达式零次或多次。
?跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的;非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

dataStr 就是我们要得的数据:“北京市 网通”。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值