2017-04-12 13 views
1

私はMicrosoftから(正規表現)について疑いがあります。私はこのモードでログファイルを書いています。正規表現、選択テキストを抽出

2017-02-20 15:58:45.442 - [XYZ] 155 RADIO_TRAIN_TO_TRACK_INITIATION_COM_SESSION 
            .VAR1p 
            .VAR2o 
            .VAR3i 
            .VAR4u 
2017-02-20 15:58:46.432 - [XYZ] 32 RADIO_TRACK_TO_TRAIN_CONFIGURATION_DETERMINATION 
            .VAR1 
            .VAR2 
            .VAR3 
            .VAR4 
            .VAR5 
            .VAR6 
2017-02-20 15:58:48.541 - [XYZ] 158 RADIO_TRAIN_TO_TRACK_INITIATION_COM_SESSION 
            .VAR1x 
            .VAR2c 
            .VAR3v 
            .VAR4f 
            .VAR5d 
            .VAR6s 

私の質問です:58::私は2017年2月20日15からすべてのテキストを抽出することができますどのよう45.442 - [XYZ] 155 ... .VAR4uに(含まれ、メッセージ155のようにすべてのテキスト)、そして、メッセージ158のすべてのテキスト(タイムスタンプが含まれます)

私はこのコードを書いていますが、それは正しく実行されません

(?<=\[XYZ] \b155\b(?:(?!\n\d{4}-\d{2}-\d).)*?\n {3,}\.)|(?<=\[XYZ] +\b158\b(?:(?!\n\d{4}-\d{2}-\d).)*?\n {3,}\.) 

よろしく

+0

コードはどうなりますか?どのようなMSアプリケーションを使用していますか? – chris85

+1

@ chris85:dnGrep。 \ d {2} \ d {2}:\ {XYZ} \ b155 \ b(? :(?!\ n \ d {4} - \ d {2} - \ d)。)* 'を' Multiline'と 'Dot as newline'オプションで置き換えます。 –

+0

@WiktorStribiżewAha、私はその最後のタグについてはわかりませんでした。 (?:\ [XYZ] \ b15 [58] \ b(?:(?!\ n \ d {4} - \ d {2} - \ d) :\ n {3、} \ .. *)+)dngrepの経験はありません。 – chris85

答えて

1

DnGrepツールは奇妙な.NETの正規表現の実装を使用しています。一度lookaを使うとヘッドの制限、最後の行は一致しません。それはバグでなければなりません。

とにかく、どのような動作しますと、改行確認チェックボックスとしてMulitlineドットで

(?m)^\d{4}-\d{2}-\d{2} \d{2}:[\d.:]+ - \[(?:RBC] +\b24|TRENO] \b156)\b(?:(?!\n\d{4}-\d{2}-\d).)*\.\w+[^\r\n]* 

です。

\.\w+[^\r\n]*部分が最後の行に非空白部分(\.マッチドット、\w+一致させる必要がある - 1+単語文字、及び[^\r\n]*はCRとLF以外の1つまたは複数のシンボルと一致しますが、交換することができます(?-s:.*) - a modifier group where the "Dot as newline" should be disabled)。

この部分(\[(?:RBC] +\b24|TRENO] \b156))は、パターン全体を繰り返すのを避けるために使用されています(あなたのコメントと同じように)。それは[と一致し、RBC] +スペース+24、またはTRENO 156(パターンの後には\bがあるため、両方とも全体の単語として表示されます)。