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

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

  • 相关阅读:
    Oracle函数-DECODE
    WPF模板
    WPF数据编辑的提交与撤销
    WPF数据验证
    WPF多源绑定
    WPF筛选、排序和分组
    WPF绑定到集合
    输出的数据格式是如何决定的-------Asp.net WebAPI学习笔记(二)
    路由其实也可以很简单-------Asp.net WebAPI学习笔记(一)
    终结篇:RemoteWebDriver与Grid简介-----Selenium快速入门(十五)
  • 原文地址:https://www.cnblogs.com/icyJ/p/express_nested.html
Copyright © 2011-2022 走看看