我需要根据复杂的分隔符拆分字符串

时间:2010-03-26 20:18:28

标签: c# regex parsing comparator

在C#中,我需要根据特定的字符序列将字符串(log4j日志文件)拆分为数组元素,即“nnnn-nn-nn nn:nn:nn INFO”。我目前正在按照换行符拆分此日志文件,这很好,除非日志语句本身包含换行符。

我不控制输入(日志文件),因此以某种方式逃避它们不是一种选择。

似乎我应该能够使用比较器或正则表达式来识别字符串,但String.Split没有这样的选项。

我是不是自己动手,或者是否有一个可以帮助的模式或框架组件?

2 个答案:

答案 0 :(得分:1)

请使用Regex.Split()

这个正则表达式应该可行,但你可能会找到一个更好的正则表达式:

@"\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d INFO"

答案 1 :(得分:0)

我最终不得不在某种程度上自己动手,因为我需要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;


}