c#中使用正则表达式对列表元素进行编号



我有一个这样的字符串结构:

BLOCK
    LIST1 Lorem ipsum dolor sit amet.
    LIST1 Lorem ipsum dolor sit amet.
    LIST1 Lorem ipsum dolor sit amet.
        LIST2 Lorem ipsum dolor sit amet.
        LIST2 Lorem ipsum dolor sit amet.
    LIST1 Lorem ipsum dolor sit amet.
BLOCK
    LIST1 Lorem ipsum dolor sit amet.
        LIST2 Lorem ipsum dolor sit amet.
            LIST3 Lorem ipsum dolor sit amet.
        LIST2 Lorem ipsum dolor sit amet.
    LIST1 Lorem ipsum dolor sit amet.
    LIST1 Lorem ipsum dolor sit amet.
    LIST1 Lorem ipsum dolor sit amet.

我想让它变成这样:

1. Lorem ipsum dolor sit amet.
    1. Lorem ipsum dolor sit amet.
    2. Lorem ipsum dolor sit amet.
    3. Lorem ipsum dolor sit amet.
        1. Lorem ipsum dolor sit amet.
        2. Lorem ipsum dolor sit amet.
    4. Lorem ipsum dolor sit amet.
2. Lorem ipsum dolor sit amet.
    1. Lorem ipsum dolor sit amet.
        1. Lorem ipsum dolor sit amet.
            1. Lorem ipsum dolor sit amet.
        2. Lorem ipsum dolor sit amet.
    2. Lorem ipsum dolor sit amet.
    3. Lorem ipsum dolor sit amet.
    4. Lorem ipsum dolor sit amet.
var input = "BLOCKrn    LIST1 Lorem ipsum dolor sit amet ...";
var levels = new List<string> { "BLOCK", "LIST1", "LIST2", "LIST3" };
var counter = levels.ToDictionary(level => level, level => 0);
// Replace each key word with incremented counter,
// while resetting deeper levels to 0.
var result = Regex.Replace(input, string.Join("|", levels), m =>
{
    for (int i = levels.IndexOf(m.Value) + 1; i < levels.Count; i++)
    {
        counter[levels[i]] = 0;
    }
    return (++counter[m.Value]).ToString() + ".";
});
结果:

<>之前1.1. 我爱你,我爱你。2. 我爱你,我爱你。3.我爱你,我爱你。1. 我爱你,我爱你。2. 我爱你,我爱你。4. 我爱你,我爱你。2.1. 我爱你,我爱你。1. 我爱你,我爱你。1. 我爱你,我爱你。2. 我爱你,我爱你。2. 我爱你,我爱你。3.我爱你,我爱你。4. 我爱你,我爱你。

最新更新