获取网页中匹配代码的正则 (获得字符串中开始和结束字符串中间得值)

来自:http://www.cnblogs.com/Fooo/archive/2010/10/22/1858121.html

 

 

如:
1div

1a

1p


2p


2div

2a

3p


4p


3a

5p


3div

4a

6p


1span

现在的问题是:有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)(?<=(/s*<(?p[^>]*>)|<(?span)[^>]*>))[/s/S]+?(?=)")) { restult +=m.Value;//就是你要的结果 MessageBox.Show(m.Value); } 

 

 

或是用
foreach(Match m in Regex.Matches(yourHtml,@"(?is)(/s*<(?p[^>]*>)|<(?span)[^>]*>)(?[/s/S]+?)")) { m.Groups["data"].Value;// } 

 

 

或是>>>>>>获得字符串中开始和结束字符串中间得值


#region 获得字符串中开始和结束字符串中间得值 /// /// 获得字符串中开始和结束字符串中间得值 /// /// 开始匹配标记 /// 结束匹配标记 /// Html字符串 /// 返回中间字符串 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  

 

 

/// /// 获得字符串中开始和结束字符串中间得值 /// /// /// 开始 /// 结束 /// 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”做为参考标识,就要考虑到

标签嵌套的问题,既要保证取包含参考标识的最内层
,又要保证
配对匹配

 

Match mm = Regex.Match(html, @"]*>(((]*>(?)|(?<-o>)|(?!]*>)[/s/S])*?(((]*>(?)|(?<-o>)|(?!", RegexOptions.IgnoreCase); 

 

输入的参考标识中如果有正则中有特殊意义的字符,需要对其进行预处理,另外需要在程序中进行异常处理,这个自己处理下吧
如果源字符串中同时多处出现输入的参考标识,这里取第一个出现的参考标识所在的

 

//正则抽取单个Table中 , 解析tb中的内容.........

Match mm = Regex.Match(html, @"]*>(((]*>(?)|
(?<-o>)|(?!]*>)[/s/S])*?(((]*>(?)|(?<-o>)|(?!", RegexOptions.IgnoreCase); if (mm.Success) { //MessageBox.Show(mm.Value); //MatchCollection mdd = GetMidValue("", 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, @"]*>/s*(?[/s/S]*?)/s*", 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); } 

 

你可能感兴趣的:(ASP.NET)