如何在字符串属性中每次出现时间戳之前附加换行符?

时间:2016-10-17 13:36:29

标签: c# regex string properties

我有一个包含字符串属性的列表,名为Actions。在每个Actions字符串属性中,有多个文本条目由时间戳分隔,如下所示:

05/10/2016 15:23:42- UTC--test
05/10/2016 16:07:04- UTC--test
05/10/2016 16:33:54- UTC--test
06/10/2016 08:24:52- UTC--test

我想要做的是在字符串属性中的每个时间戳之前插入换行符\n

因此,我循环遍历列表中的每个记录,然后尝试通过向每个时间戳添加换行来修改每个字符串属性。但我不确定如何获取字符串中的时间戳值来执行替换:

//Not sure how to find the instance of timestamp in the string
foreach (var record in escList)
{  
    record.Actions = record.Actions.Replace("timestamp_text_string","\n" + "timestamp_text_value");
}

我在考虑使用正则表达式来匹配与时间戳模式匹配的每个字符串,但不确定正则表达式是否在此上下文中起作用:

string pattern = @"\[[0-9]:[0-9]{1,2}:[0-9]{1,2}\]"; //timestamp pattern
record.Actions = record.Actions.Replace(pattern,"\n" + pattern);

如何在字符串属性中每次出现时间戳之前附加换行符?

所需的结果是,对于字符串属性中的每个条目,即05/10/2016 15:23:42- UTC--test,在字符串的该部分之前会添加一个新行。给出以下输出:

05/10/2016 15:23:42- UTC--test

05/10/2016 16:07:04- UTC--test

05/10/2016 16:33:54- UTC--test

06/10/2016 08:24:52- UTC--test

3 个答案:

答案 0 :(得分:2)

使用Split

List<string> result=new List<string>();
foreach (var record in escList)
{
    result.Add(record.Actions.Replace(record.Actions.Split(' ')[1], "\n" + record.Actions.Split(' ')[1]));
}

答案 1 :(得分:0)

不确定如果我正确理解了您想要的结果,但我认为性能明智,您会对使用StringBuilder而不是List感兴趣。这是我做的一个样本:

class Program
{
    static void Main(string[] args)
    {
        string action1 = "05/10/2016 15:23:42- UTC--test";
        string action2 = "05/10/2016 16:07:04- UTC--test";
        string action3 = "05/10/2016 16:33:54- UTC--test";
        string action4 = "06/10/2016 08:24:52- UTC--test";
        List<string> sample_actions = new List<string>() { action1, action2, action3, action4 };

        Record rec = new Record();

        foreach (string sample_action in sample_actions)
        {
            rec.Actions.AppendLine(sample_action).AppendLine();
        }
    }
}
class Record
{
    public StringBuilder Actions { get; set; }
    public Record()
    {
        Actions = new StringBuilder();
    }
}

编辑以满足您的需求

答案 2 :(得分:0)

假设actions至少有一个元素:

spacedAtions = actions.Take(1).Concat(actions.Skip(1).Select(a => $"\n{a}));