0

C#では、文字列(log4jログファイル)を特定の文字シーケンス、つまり「nnnn-nn-nn nn:nn:nnINFO」に基づいて配列要素に分割する必要があります。現在、このログファイルを改行で分割しています。これは、ログステートメント自体に改行が含まれている場合を除いて問題ありません。

私は入力(ログファイル)を制御しないので、どういうわけかそれらをエスケープすることはオプションではありません。

コンパレータまたは正規表現を使用して文字列を識別できるはずですが、String.Splitにはそのようなオプションはありません。

私は自分自身を転がして立ち往生していますか、それともここで役立つパターンまたはフレームワークコンポーネントがありますか?

4

2 に答える 2

1

これにはRegex.Split()を使用します。

この正規表現は機能するはずですが、より良い正規表現が見つかる可能性があります。

@"\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d INFO"
于 2010-03-26T20:23:16.010 に答える
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;


}
于 2010-03-29T20:24:40.700 に答える