0

私は誰かのためにログファイルをトレースしていますが、それらは完全に混乱しています (改行や区切り記号はありません)。そこで、ログを整理するために簡単な正規表現を実行しました。ロギング #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]
4

1 に答える 1

2

re.matchre.searchおよび特定の正規表現が一致しない場合にre.findall戻るため、可能な正規表現を反復処理してテストできます。None

tests = [
    re.compile(r'...'),
    re.compile(r'...'),
    re.compile(r'...'),
    re.compile(r'...')
]

for test in tests:
    matches = test.findall(your_string):

    if matches:
        print test, 'works'
于 2013-01-07T21:01:41.523 に答える