记一笔正则,
string pattern1 = @"<divsclass=""comment-list"">[s]*<ul>[s]*(?<allEle>(?<liElement><(?<HtmlTag>[w]+)[^>]*sclass=(?<Quote>[""']?)J_comment-li(?(Quote)k<Quote>)[""']?[^>]*>(((?<Nested><k<HtmlTag>[^>]*>)|</k<HtmlTag>>(?<-Nested>)|sS]*?)*)</k<HtmlTag>>)*)[s]+</ul>"; string pattern = @"(?<liElement><(?<HtmlTag>[w]+)[^>]*sclass=(?<Quote>[""']?)J_comment-li(?(Quote)k<Quote>)[""']?[^>]*>(((?<Nested><k<HtmlTag>[^>]*>)|</k<HtmlTag>>(?<-Nested>)|[sS]*?)*)</k<HtmlTag>>)"; var input = File.ReadAllText(@"E:UsersAdministratorDesktopinput.txt"); var mt1 = Regex.Match(input, pattern1); var lis = mt1.Groups["allEle"].Value; if (!string.IsNullOrWhiteSpace(lis)) { var mts = Regex.Matches(lis,pattern); for (int i = 0; i < mts.Count; i++) { var mt = mts[i]; Console.WriteLine(string.Join("", Enumerable.Repeat(i, 100))); Console.WriteLine(mt.Groups["liElement"].Value); Console.WriteLine("============================================================================="); } }
题目:取特定class对应div下面的所有li数据
难点:li里面有子li。
所以这是一个匹配嵌套的问题。
思路:1. 获取<div><ul>....</ul></div>之间的所有文本,也需要考虑中间嵌套div或者ul的情况。
2. 在1的基础上读取li,需要考虑li嵌套的情况。
注意:思路中2的正则其实是1的正则的子部分,由于需要解决1的嵌套情况,所以写的有点啰嗦。
本来应该可以很漂亮的一条正则取出来,但是能力有限,如果有什么意见欢迎留言。