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

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

  • 相关阅读:
    重写DEV的DateEdit控件的类只选择年月
    C# 模拟from表单提交webservice
    xpo 条件查询
    bzoj1001 [BeiJing2006]狼抓兔子
    bzoj3631 [JLOI2014]松鼠的新家
    bzoj2456 mode
    bzoj3156防御准备
    bzoj2424 [HAOI2010]订货
    [BZOJ3473]字符串
    BZOJ 3993 [SDOI2015]星际战争
  • 原文地址:https://www.cnblogs.com/icyJ/p/express_nested.html
Copyright © 2011-2022 走看看