zoukankan      html  css  js  c++  java
  • .net 正则 嵌套 获取

    记一笔正则,

    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的嵌套情况,所以写的有点啰嗦。

    本来应该可以很漂亮的一条正则取出来,但是能力有限,如果有什么意见欢迎留言。

  • 相关阅读:
    java-第二周学习总结
    春季总结
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    网络层思维导图
    数据链路层思维导图
    Mysql数据库的基本操作之建表操作(2)
  • 原文地址:https://www.cnblogs.com/icyJ/p/express_nested.html
Copyright © 2011-2022 走看看