.net 正则 嵌套 获取

记一笔正则,

string pattern1 = @"<div\sclass=""comment-list"">[\s]*<ul>[\s]*(?<allEle>(?<liElement><(?<HtmlTag>[\w]+)[^>]*\sclass=(?<Quote>[""']?)J_comment-li(?(Quote)\k<Quote>)[""']?[^>]*>(((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|\s\S]*?)*)</\k<HtmlTag>>)*)[\s]+</ul>";
string pattern = @"(?<liElement><(?<HtmlTag>[\w]+)[^>]*\sclass=(?<Quote>[""']?)J_comment-li(?(Quote)\k<Quote>)[""']?[^>]*>(((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|[\s\S]*?)*)</\k<HtmlTag>>)";


var input = File.ReadAllText(@"E:\Users\Administrator\Desktop\input.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的嵌套情况,所以写的有点啰嗦。

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

猜你喜欢

转载自www.cnblogs.com/icyJ/p/express_nested.html