首页 > 解决方案 > 仅在每次新索引更改的前两行更改字符串

问题描述

我有一个很长的字符串列表,我正在尝试操作。我想将字段“描述”重命名为TypeProcess,但仅限于每个新数字(1、2、3)的前两行。

例如:

1  description   Payment
1  description   Order
1  ID   0222ed48-ddc1-3e19-4770-616c14935ca1

2  description   Refund
2  description   Partial
2  description   Contacted?
2  ID    87f11531-0493-4f5a-86d2-c8be0c23678f

3  description   Refund
3  description   Partial
3  ID    87f11531-0493-4f5a-86d2-c8be0c23678f

为此:仅在每个数字更改(1,2,3)的前两行使用类型和进程:

1  **Type**   Payment
1  **Process**   Order
1  ID   0222ed48-ddc1-3e19-4770-616c14935ca1

2  **Type**   Refund
2  **Process**   Partial
2  description   Contacted?
2  ID    87f11531-0493-4f5a-86d2-c8be0c23678f

3  **Type**   Refund
3  **Process**   Partial
3  ID    87f11531-0493-4f5a-86d2-c8be0c23678f

我是否应该尝试在大于 2 时重置的每个循环中添加一个计数器,从而将前两行换掉?

标签: c#

解决方案


using System;
using System.Text.RegularExpressions;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            string foo = @"1  description   Payment
1  description   Order
1  ID   0222ed48-ddc1-3e19-4770-616c14935ca1

2  description   Refund
2  description   Partial
2  description   Contacted?
2  ID    87f11531-0493-4f5a-86d2-c8be0c23678f

3  description   Refund
3  description   Partial
3  ID    87f11531-0493-4f5a-86d2-c8be0c23678f";

            int number = 0;
            int line = 0;
            string bar = Regex.Replace(foo, @"^(\d+)(\s+)(\w+)", match => 
            {
                int currentNumber = Convert.ToInt32(match.Groups[1].Value);
                if (currentNumber == number)
                    line++;
                else
                {
                    number = currentNumber;
                    line = 1;
                }

                string newToken = line switch
                {
                    1 => "Type",
                    2 => "Process",
                    _ => match.Groups[3].Value
                };

                return match.Groups[1].Value + match.Groups[2].Value + newToken;
            }, RegexOptions.Multiline);
        }
    }
}

[编辑] 交换机可能需要 .NET 5


推荐阅读