2

解析しようとしている次のログ ファイルがあります。私は正規表現を使用して必要な情報を収集しており、そのほとんどを完了しています。実行されたステップに従って、ログ ファイルの特定の部分が数回繰り返されます。次の正規表現を使用してキャプチャ配列を返すこともできますが、手順の順序が変わる可能性があります。特定のステップをある程度確実にキャプチャできるようにしたいと考えています。

正規表現:

\[Total execution Time: (.+) min

ログの抜粋:

02/19 00:48:46:762 [情報] [MigrationWizard] [合計実行時間: 11.05 分] [管理者] [(null)] [14]
02/19 00:48:46:762 [情報] [MigrationWizard] [エラーの総数: 0] [管理者] [(null)] [14]
02/19 00:48:46:762 [情報] [MigrationWizard] [ステップ 1 完了] [管理者] [(ヌル)] [14]

合計実行時間の後に特定のステップ名が続くことを確認するために、先読みアサーションを使用する必要がありますか? その間のすべての文字をどのように説明しますか? 複数の改行をどのように説明するのですか? 私はC#を使用しています。

4

3 に答える 3

1

この正規表現を試してください

Total execution Time: ([\d.]+).*\r?\n.*\r?\n.*\[Step 1\s

もちろん、「ステップ1」は、一致させたいステップに合わせて変更する必要があります。これは、「ステップ 1」の合計実行時間のみに一致します。

単一行モードが有効になっていないことを確認してください (したがって、. が改行間で一致しません)。

ログエントリの順序は常に同じであると想定しました。

于 2013-03-04T18:52:03.483 に答える
0

あなたの正規表現

 \[Total execution Time: (.+) min

.+は、バックトラックして後続の文字との一致を試みる前に、できるだけ多くの文字 (改行を除く) と貪欲に一致するため、非効率的" min"です。.+?以前はできるだけ少ない文字に一致するほうがよい" min"でしょうし、数字とポイントだけ[\d.]+に一致するか、特定の形式に一致するほうがよいでしょう\d\d\.\d\d

とにかく、[Step 1それに続く次のステップの実行時間を取得するには、たとえば次のように使用できます

Match m = Regex.Match(str,
    @"\[Total execution Time: ([\d.]+)(?:(?!\[Step ).)+\[Step 1 Done",
        RegexOptions.Singleline
);

if (m.Success) {
    Console.WriteLine(m.Groups[1].Value);         
}

否定先読みは、文字列に出現するまでの文字のみが一致することを(?!\[Step )意味します。一致全体が成功するためには、一致する必要があります。."[Step ""[Step 1 Done"

RegexOptions.Singleline.改行を越えて一致するように使用されます。

または、肯定的な後読みでパターンの前にパターンを配置[\d.]+し、肯定的な先読みでそれに続くパターンを配置して、値を取得するためにキャプチャ グループを使用する必要をなくすこともできますが、ほとんど違いはありません。

于 2013-03-04T20:11:33.800 に答える
0

次のようなことを試してください:

string strRegex = @"(Total execution Time: )(\d{2}[\.:]\d{2})\s+";
RegexOptions myRegexOptions = RegexOptions.Multiline | RegexOptions.Singleline;
Regex myRegex = new Regex(strRegex, myRegexOptions);

string strTargetString = @"..............";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // ........ do something
  }
}

入力文字列:

02/19 00:48:46:762 [INFO ] [MigrationWizard] [Total execution Time: 11.05 minute(s)] [administrator] [(null)] [14]
02/19 00:48:46:762 [INFO ] [MigrationWizard] [Total number of error(s): 0] [administrator] [(null)] [14]
02/19 00:48:46:762 [INFO ] [MigrationWizard] [Step 1 Done.] [administrator] [(null)] [14]
02/19 00:48:46:762 [INFO ] [MigrationWizard] [Total execution Time: 13:25 minute(s)] [administrator] [(null)] [14]

一致:

Total execution Time: 11.05
Total execution Time: 13:25
于 2013-03-04T18:35:50.173 に答える