我有一个包含字符串属性的列表,名为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
答案 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}));