1

次のようなテキストを含むログ ファイルがあります。

Jul  1 03:27:12 syslog: [m_java][ 1/Jul/2013 03:27:12.818][j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7) 

ファイルには 2 つの時刻形式があります。[] で囲まれた日時形式に基づいて、このログ ファイルを並べ替える必要があります。

これは私が使用しようとしている正規表現です。しかし、それは何も返しません。

t_pat = re.compile(r".*\[\d+/\D+/.*\]")

ファイルの各行を調べて、このパターンを適用し、日付と時刻に基づいて行を並べ替えたいと考えています。

誰かがこれについて私を助けることができますか? ありがとう!

4

3 に答える 3

2

正規表現に追加する必要があるスペースがそこにあります

text = "Jul  1 03:27:12 syslog: [m_java][ 1/Jul/2013 03:27:12.818][j:[SessionThread <]^Iat com/avc/abc/magr/service/find.something(abc/1235/locator/abc;Ljava/lang/String;)Labc/abc/abcd/abcd;(bytecode:7)"
matches = re.findall(r"\[\s*(\d+/\D+/.*?)\]", text)
print matches
['1/Jul/2013 03:27:12.818']

次に、次の関数を使用して時間を解析します

http://docs.python.org/2/library/time.html#time.strptime

最後に、これを dict のキーとして使用し、行を値として使用し、キーに基づいてこれらのエントリを並べ替えます。

于 2013-07-05T15:44:27.827 に答える
1

最初のスペースと一致していません。また、簡単に抽出できるように日付をグループ化し、\Dおよび.*パターンを非貪欲に制限します。

t_pat = re.compile(r".*\[\s?(\d+/\D+?/.*?)\]")

デモ:

>>> re.compile(r".*\[\s?(\d+/\D+?/.*?)\]").search(line).group(1)
'1/Jul/2013 03:27:12.818'

パターンをさらに絞り込むことができます。たとえば、月の 3 文字だけを一致させる必要があります。

t_pat = re.compile(r".*\[\s?(\d{1,2}/[A-Z][a-z]{2}/\d{4} \d{2}:\d{2}:[\d.]{2,})\]")
于 2013-07-05T15:44:41.363 に答える