1

こんにちは私は私のアプリケーションでC#を使用してログファイル(テキストファイル)を読んでいます、そして私は日付を使ってログファイルを読んでいます。また、日付ごとに例外を取得するための正規表現形式を作成しました。

現在、この正規表現形式を正常に使用して例外を取得していますが、例外行を正しく取得できません。以下の正規表現形式を使用するときに、例外行の最後の文字が欠落しています。この行で私が間違ったことを教えてください。例外の完全な行を取得するための解決策を誰かに教えてもらえますか?

前もって感謝します。

私のコードは次のとおりです。

 var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>(.(?!\d{4}\-\d{2}\-\d{2}))+)");

私のtxtファイルは次のようになります

2012-06-21 04:35:30,177|| [5]|| DEBUG|| GID.AAFramework.Shared.LdapAuthentication.PrincipleImpl||  PrincipleImpl: IsInRole(string role)-  Entered
2012-06-21 04:35:30,177|| [5]|| DEBUG|| GID.AAFramework.Shared.LdapAuthentication.PrincipleImpl||  PrincipleImpl: IsInRole(string role)-  IsInRole(ADMINUSER) 
results : True

私のログファイルでは、すべての行が日付で始まりますが、一部の行ではメッセージが長すぎるため、次の行になります。ファイルが日付で始まることを読みたいということは、そのメッセージで始まる行を見逃していることを意味します。

4

2 に答える 2

1

使用してみてください:

 @"(?<date>\d{4}\-\d{2}\-\d{2})\s+(?<message>(.(?!\d{4}\-\d{2}\-\d{2}))+.)"
于 2012-06-26T13:38:41.283 に答える
1

最初の質問に答えるには、最後に欠落している文字を取得するには、パターン内のドットの位置を変更するだけです。

var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>((?!\d{4}\-\d{2}\-\d{2}).)+)");

先読みパターンの開始でない場合、これは次の文字と一致するようになりました。先読みパターンが次の文字に続いていない場合、パターンは次の文字と一致しました。

次の行について追加した最後の部分であなたの質問が何であるかわかりません...

于 2012-06-26T14:26:22.080 に答える