私は誰かのためにログファイルをトレースしていますが、それらは完全に混乱しています (改行や区切り記号はありません)。そこで、ログを整理するために簡単な正規表現を実行しました。ロギング #codes# はリスト内で適切に分離され、それらの文字列は sub-dict 内でそれに添付されます。こんな感じです:
Dict [
0 : [LOGCODE_53 : 'The string etc etc']
]
これは簡単だったので、ログ認識も直接追加することを目的としていました。これで LOGCODE を一致させることができますが、問題は、コードが何にも準拠しておらず、多くの場合、異なる LOGCODE に同じ出力文字列が含まれていることです。
そこで、ログの内容を検出するためにいくつかの REGEX マッチを作成しました。私の質問は次のとおりです。多種多様な文字列パターンを検出する知恵とは? 約 110 種類の異なる文字列が存在する可能性があり、それらは非常に異なっているため、それらを「完全に一致させる」ことはできません。文字列に対して〜110個のREGEXを実行して、文字列の意図を見つけ、論理レジスタにインデックスを付けるにはどうすればよいですか。
みたいな感じです。「この $STRING を取得して、この $LIST 内のすべての $REGEX をテストし、文字列に一致する $REGEX(es) (インデックス) を教えてください」.
私のコード:
import re
# Open, Read-out and close; Log file
f = open('000000df.log', "rb")
text = f.read()
f.close()
matches = re.findall(r'00([a-zA-Z0-9]{2})::((?:(?!00[a-zA-Z0-9]{2}::).)+)', text)
print 'Matches: ' + str(len(matches))
print '=========================================================================================='
for match in matches:
submatching = re.findall(r'(.*?)\'s (.*?) connected (.*?) with ZZZ device (.*?)\.', match[1])
print match[0] + ' >>> ' + match[1]
print match[0] + ' >>> ' + submatching[0][0] + ', ' + submatching[0][1] + ',',
print submatching[0][2] + ', ' + submatching[0][3]