Мне нужно разделить строку на основе сложного разделителя - PullRequest
0 голосов
/ 26 марта 2010

В C # мне нужно разбить строку (файл журнала log4j) на элементы массива на основе определенной последовательности символов, а именно: «nnnn-nn-nn nn: nn: nn INFO». В настоящее время я делю этот файл журнала на новые строки, что хорошо, за исключением случаев, когда сами операторы журнала содержат новые строки.

Я не контролирую ввод (файл журнала), поэтому экранировать их каким-либо образом нельзя.

Похоже, я должен быть в состоянии использовать компаратор или регулярное выражение для идентификации строк, но String.Split не имеет такой опции.

Я застрял, катаясь самостоятельно, или есть какой-то компонент структуры или структуры, который может помочь здесь?

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Используйте для этого Regex.Split () .

Это регулярное выражение должно работать, но вы можете найти лучшее:

@"\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d INFO"
0 голосов
/ 30 марта 2010

Мне пришлось в какой-то степени свернуть свою собственную, потому что мне нужен разделитель, который есть в 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;


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...