在 C# 中,我需要根据特定的字符序列将字符串(log4j 日志文件)拆分为数组元素,即“nnnn-nn-nn nn:nn:nn INFO”。我目前正在用换行符分割这个日志文件,这很好,除非日志语句本身包含换行符。
我不控制输入(日志文件),所以以某种方式转义它们不是一种选择。
似乎我应该能够使用比较器或正则表达式来识别字符串,但 String.Split 没有这样的选项。
我是否坚持自己滚动,或者是否有可以在这里提供帮助的模式或框架组件?
在 C# 中,我需要根据特定的字符序列将字符串(log4j 日志文件)拆分为数组元素,即“nnnn-nn-nn nn:nn:nn INFO”。我目前正在用换行符分割这个日志文件,这很好,除非日志语句本身包含换行符。
我不控制输入(日志文件),所以以某种方式转义它们不是一种选择。
似乎我应该能够使用比较器或正则表达式来识别字符串,但 String.Split 没有这样的选项。
我是否坚持自己滚动,或者是否有可以在这里提供帮助的模式或框架组件?
我最终不得不在某种程度上自己滚动,因为我需要 Regex.Split 吃的分隔符。
private List<string> splitOnLogDelimiter(string bigString)
{
Regex r = new Regex("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2} [0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2} INFO");
List<string> result = new List<string>();
//2010-03-26 16:06:38 INFO
int oldIndex = 0;
int newIndex = 0;
foreach (Match m in r.Matches(bigString))
{
newIndex = m.NextMatch().Index-1;
if (newIndex <= 0) break;
result.Add(bigString.Substring(oldIndex, newIndex - oldIndex));
oldIndex = newIndex+1;
}
return result;
}