c#中使用正则表达式对列表元素进行编号
本文关键字:列表元素 编号 正则表达式 | 更新日期: 2023-09-27 18:08:41
我有一个这样的字符串结构:
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 = "BLOCK'r'n 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. 我爱你,我爱你。