获取网页中匹配代码的正则 (获得字符串中开始和结束字符串中间得值)
2010-11-26 17:16
417 查看
来自:/article/4757341.html
如:
<div>1div</div>
<a>1a</a>
<p>1p</p>
<p>2p</p>
<div>2div</div>
<a>2a</a>
<p>3p</p>
<p>4p</p>
<a>3a</a>
<p>5p</p>
<div>3div</div>
<a>4a</a>
<p>6p</p>
<span>1span</span>
现在的问题是:有N多DIV,N多p,N多A标签以及最多1个span,想只获取所有p里的内容以及最后一个span里的内容(其中获取P的内容有一个条件,那就是只有前面有一个A标签的P的内容才会被获取),span或许有或许没有,如果有就获取,如果没有就不获取求:
C#的正则表达式
using System.Text.RegularExpressions;
或是用
或是>>>>>>获得字符串中开始和结束字符串中间得值
//正则抽取单个Table , 可根据table内的某个标识字符, good !
如果仅仅是以“会员资料”这样的做为参考标识,用我上面写的稍稍改造就可以了,问题的复杂在于,如果以“00”或者“444”做为参考标识,就要考虑到<table>标签嵌套的问题,既要保证取包含参考标识的最内层<table>,又要保证<table>和</table>配对匹配
输入的参考标识中如果有正则中有特殊意义的字符,需要对其进行预处理,另外需要在程序中进行异常处理,这个自己处理下吧
如果源字符串中同时多处出现输入的参考标识,这里取第一个出现的参考标识所在的<table>
//正则抽取单个Table中 , 解析tb中的内容.........
如:
<div>1div</div>
<a>1a</a>
<p>1p</p>
<p>2p</p>
<div>2div</div>
<a>2a</a>
<p>3p</p>
<p>4p</p>
<a>3a</a>
<p>5p</p>
<div>3div</div>
<a>4a</a>
<p>6p</p>
<span>1span</span>
现在的问题是:有N多DIV,N多p,N多A标签以及最多1个span,想只获取所有p里的内容以及最后一个span里的内容(其中获取P的内容有一个条件,那就是只有前面有一个A标签的P的内容才会被获取),span或许有或许没有,如果有就获取,如果没有就不获取求:
C#的正则表达式
using System.Text.RegularExpressions;
string restult = ""; foreach(Match m in Regex.Matches(str ,@"(?ins)(?<=(</a>/s*<(?<mark>p[^>]*>)|<(?<mark>span)[^>]*>))[/s/S]+?(?=<//k<mark>)")) { restult +=m.Value;//就是你要的结果 MessageBox.Show(m.Value); }
或是用
foreach(Match m in Regex.Matches(yourHtml,@"(?is)(</a>/s*<(?<mark>p[^>]*>)|<(?<mark>span)[^>]*>)(?<data>[/s/S]+?)<//k<mark>")) { m.Groups["data"].Value;// }
或是>>>>>>获得字符串中开始和结束字符串中间得值
#region 获得字符串中开始和结束字符串中间得值 /// <summary> /// 获得字符串中开始和结束字符串中间得值 /// </summary> /// <param name="begin">开始匹配标记</param> /// <param name="end">结束匹配标记</param> /// <param name="html">Html字符串</param> /// <returns>返回中间字符串</returns> public static MatchCollection GetMidValue(string begin, string end, string html) { Regex reg = new Regex("(?<=(" + begin + "))[.//s//S]*?(?=(" + end + "))", RegexOptions.Multiline | RegexOptions.Singleline); return reg.Matches(html); } #endregion
/// <summary> /// 获得字符串中开始和结束字符串中间得值 /// </summary> /// <param name="str"></param> /// <param name="s">开始</param> /// <param name="e">结束</param> /// <returns></returns> private string getvalue(string str, string start, string end) { Regex rg = new Regex("(?<=(" + start + "))[.//s//S]*?(?=(" + end + "))", RegexOptions.Multiline | RegexOptions.Singleline); return rg.Match(str).Value; }
//正则抽取单个Table , 可根据table内的某个标识字符, good !
如果仅仅是以“会员资料”这样的做为参考标识,用我上面写的稍稍改造就可以了,问题的复杂在于,如果以“00”或者“444”做为参考标识,就要考虑到<table>标签嵌套的问题,既要保证取包含参考标识的最内层<table>,又要保证<table>和</table>配对匹配
Match mm = Regex.Match(html, @"<table[^>]*>(((<table[^>]*>(?<o>)|</table>(?<-o>)|(?!</?table)[/s/S])*)(?(o)(?!)))/b" + "会员资料" + @"/b(?:(?!<table[^>]*>)[/s/S])*?(((<table[^>]*>(?<o>)|</table>(?<-o>)|(?!</?table)[/s/S])*)(?(o)(?!)))</table>", RegexOptions.IgnoreCase);
输入的参考标识中如果有正则中有特殊意义的字符,需要对其进行预处理,另外需要在程序中进行异常处理,这个自己处理下吧
如果源字符串中同时多处出现输入的参考标识,这里取第一个出现的参考标识所在的<table>
//正则抽取单个Table中 , 解析tb中的内容.........
Match mm = Regex.Match(html, @"<table[^>]*>(((<table[^>]*>(?<o>)|</table>(?<-o>)|(?!</?table)[/s/S])*)(?(o)(?!)))/b" + "会员输赢资料" + @"/b(?:(?!<table[^>]*>)[/s/S])*?(((<table[^>]*>(?<o>)|</table>(?<-o>)|(?!</?table)[/s/S])*)(?(o)(?!)))</table>", RegexOptions.IgnoreCase); if (mm.Success) { //MessageBox.Show(mm.Value); //MatchCollection mdd = GetMidValue("<td", "</td>", mm.Value); //foreach (Match m in mdd) //{ // for (int i = 1; i < m.Groups.Count; i++) // { // restult += m.Groups[i].Value;//就是你要的结果 // } //} MatchCollection mc = Regex.Matches(mm.Value, @"<td[^>]*>/s*(?<content>[/s/S]*?)/s*</td>", RegexOptions.IgnoreCase); foreach(Match m in mc) { for (int i = 1; i < m.Groups.Count; i++) { restult += m.Groups[i].Value + "/n"; } } MessageBox.Show(restult); }
相关文章推荐
- C#: 获取网页中匹配代码的正则 (获得字符串中开始和结束字符串中间得值)
- 获得字符串中开始和结束字符串中间得值
- 黄聪:C#用正则表达式获得指定开始和结束字符串中间的一段文本
- 获得字符串中开始和结束字符串中间得值
- .Net 获得字符串中开始和结束字符串中间得值
- c# 用正则表达式获取开始和结束字符串中间的值
- c#用正则表达式获得指定开始和结束字符串中间的一段文本
- c# 用正则表达式获取开始和结束字符串中间的值
- PHP正则表达式 获取开始字符串和结束字符串中的部分内容
- php正则表达式 获取开始字符串和结束字符串中的部分内容
- java正则表达式,读取字符串不区分大小写;正则匹配表达式中的数字或者字母;正则匹配网页中的邮箱
- 正则匹配:去除字符串中的空格,获取select下拉选项中的option的文本内容
- 【java基础之代码】【正则表达式匹配字符串检测输入的是否为手机号码】
- 如何用正则表达式匹配指定字符开始和指定字符结束
- C# 下面的代码示例演示如何结束异步操作以获取请求的流,然后开始一个请求以获取响应。....
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
- 获取正则表达式匹配的字符串
- java 正则表达式获取两个字符中间的字符串
- 21.2.5 获取与正则表达式进行匹配检测的字符串
- c# 获取网页中指定的字符串信息的实例代码