サブストリングに関する投稿がたくさんあることは知っています。これに対する答えを探して、それらの多くを検索したと思います。
ログからの多くの文字列、行があり、それらを分類して解析しようとしています。
それらは次のようになります。
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE 静的メッセージ;動的メッセージ
ここで、ファイル名はログが置かれているファイル、日付はメッセージがログに記録された日時、TYPE はメッセージのタイプであり、メッセージは 2 つの部分 (静的部分) で構成されます。および動的部分の場合、静的部分はメッセージに対して変更されず、動的部分は (明らかに) 変更される可能性があり、それらは a で分割されますが、動的部分には;
さらに多くの可能性があります;
。
静的メッセージと動的メッセージを抽出できるようにしたい。
これまでのところ、私は次のようなものを使用しています:
parts = line.split(";")
static = parts[0]
dynamic = ";".join(parts[1:])
あまりきれいではありません。また、私の静的部分にはファイル名と日付とタイプが含まれていますが、これは望ましくありません。それで、私はこのようなことをしたいと思った:
parts = " ".join(":".join(line.split(":")[1:]).split(" ")[4:]).split(";")
static = parts[0]
dynamic = ";".join(parts[1:])
私が試したところ、ある程度は機能しますが、ファイル名にスペースが含まれている場合や、TYPEにスペースが含まれている場合や、何かが正しく機能していない場合があり、静的メッセージの一部としてTYPEが表示されることがあります...効率はこれは、毎日解析して分類する必要がある数千行のログであるためです。このハックジョブ以外にこれを行うためのより良い方法があるかどうか疑問に思っています??
編集:ログの行の例をもっと提供すると思いました。先ほど言ったことを修正するために、エントリにはいくつかの種類があります。
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE 静的メッセージ;動的メッセージ
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 MODULE.NAME TYPE THREAD.OR.CONNECTION.INFORMATION 静的メッセージ;動的メッセージ
ご覧のとおり、ログ エントリには 2 種類あります。モジュールのないものとモジュールのあるもの、モジュールのあるものは接続に接続でき、一部はスレッドに接続できます。これにより、解析が難しくなります。