2017-01-22 13 views
0

ここにPython newbがあります。 gzipファイルのグループの内部からログデータを抽出しようとしています。私は、タイムスタンプと一致するようにしようとしています正規表現マッチスコープを制限しようとしています

first_match = re.compile(r"(?P<date>\d{4}[-]?\d{1,2}[-]?\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}).*?http://servername:99999/chargeit.*?manager_event=first.*?\bwantThisUser=([^&]*).*?\b_operator=(\w+).*?request\:.*?Want-To-Have-This\:\s\*123\*0\#") 

tfile = tarfile.open("logfile-year-month-day.number.log.tar.gz", "r") 
    for filename in tfile.getmembers(): 
      f = tfile.extractfile(filename).read() 
      f = str(f) 
      for match in first_match.finditer(f): 
       linecount = linecount + 1 
       print(linecount, match.group(1), match.group(2), match.group(3)) 

、および他の2: 正規表現: データは、私はその圧縮されたtarファイルから各ファイルを抽出し、このような単一のオブジェクトとしてそれを読むしようとしていますので、複数行にまたがりますログファイル内のグループ。 ログデータは行ずつ印刷した場合、多少のようになります。私はこれをキャッチするために期待してい

2016-12-16 20:43:47 DEBUG[ispatcher-12570] this.is.the.api.Api - http://servername:99999/chargeit?session_id=1d7cb257e22946abbb3a14b17f232505&manage_event=first&wantThisUser=4119057000083&_source=operator3 b90e7798-8abd-4cf4-9660-45d6527e2804 request: 
HEADERS: 
    this-is-a-header: 200 
    Want-To-Have-This: *123*200# 
    Host: servername:99999 
    Accept: */* 
    User-Agent: AHC/2.0 
    Timeout-Access: <function1> 
CONTENT: 

2016-12-16 20:43:47 DEBUG[ispatcher-12571] this.is.the.api.Api - http://servername:99999/chargeit?session_id=20111&manage_event=first&wantThisUser=4119185011005&_operator=operator4 926fa104-e72f-46e8-a5fc-912ef9707a01 request: 
HEADERS: 
    this-is-a-header: 0 
    Want-To-Have-This: *123*0# 
    Host: servername:99999 
    Accept: */* 
    User-Agent: AHC/2.0 
    Timeout-Access: <function1> 
CONTENT: 

2016-12-16 20:26:29 DEBUG[ispatcher-12563] this.is.the.api.Api - http://servername:99999/chargeit?session_id=a5e456ad2f5645c39a580463630cd3db&manage_event=first&wantThisUser=4119023107960&_source=operator2 1021c087-1918-40a3-a7c1-4b7c37690471 request: 
HEADERS: 
    this-is-a-header: 1000*0111111111 
    Want-To-Have-This: *123*1000*0111111111# 
    Host: servername:99999 
    Accept: */* 
    User-Agent: AHC/2.0 
    Timeout-Access: <function1> 
CONTENT: 

2016-12-16 20:43:47 DEBUG[ispatcher-12571] this.is.the.api.Api - http://servername:99999/chargeit?session_id=20111&manage_event=first&wantThisUser=4119185011005&_operator=operator4 926fa104-e72f-46e8-a5fc-912ef9707a01 request: 
HEADERS: 
    this-is-a-header: 0 
    Want-To-Have-This: *123*0# 

を私はキャプチャするために望んでいるグループは、タイムスタンプ、次のとおりです。(2016-12-16 20:43:4)wantThisUser=4119185011005)と_operator=operator4)の値を指定します。

代わりに、正規表現は、ターゲットラインを捕捉し、1(S)その上:

2016-12-16 20:43:47 DEBUG[ispatcher-12570] this.is.the.api.Api - http://servername:99999/chargeit?session_id=1d7cb257e22946abbb3a14b17f232505&manage_event=first&wantThisUser=4119057000083&_source=operator3 b90e7798-8abd-4cf4-9660-45d6527e2804 request: 
HEADERS: 
    this-is-a-header: 200 
    Want-To-Have-This: *123*200# 
    Host: servername:99999 
    Accept: */* 
    User-Agent: AHC/2.0 
    Timeout-Access: <function1> 
CONTENT: 

2016-12-16 20:43:47 DEBUG[ispatcher-12571] this.is.the.api.Api - http://servername:99999/chargeit?session_id=20111&manage_event=first&wantThisUser=4119185011005&_operator=operator4 926fa104-e72f-46e8-a5fc-912ef9707a01 request: 
HEADERS: 
    this-is-a-header: 0 
    Want-To-Have-This: *123*0# 

そして、それは所望の一致の上にライン(S)からタイムスタンプと他の2つのグループを引っ張ります。 マッチを自分の行に制限するにはどうすればよいですか?または私はこれに間違った方法で近づいていますか?

+0

あなたの質問について謝罪する必要はありません:) – blubberdiblub

+0

私はおそらくあなたのデータの複数のレベルではなく、すべての正規表現と、ステップすることにより、この問題のステップに取り組むだろう。まず、ログデータをレコード/ログエントリに分割し、最初の行を取ります。最初の行に正規表現を適用し、タイムスタンプとURI全体を抽出します。そして、私はライブラリを使ってURIとそのクエリ引数を辞書に解析します。その後、辞書にインデックスを付けてwantThisUserと_operatorにアクセスします。 – blubberdiblub

+0

問題はログ行の順序です。 「やりたいこと:(。*)」という行は、私が探しているもので、データを区切るいくつかの文字列形式があります。その行があるとき、操作がいつ発生したかを私に知らせるためにURIのグループが必要になります。だからこそ私はそれをひとつに集めようとしているのです。 – Sina

答えて

0

おかげで、@blubberdibulb! あなたは私を解析するより管理チャンクを作るfirst_match = re.compile(r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*?(?=^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}|\Z)", re.DOTALL|re.MULTILINE) に私のブロックマッチング正規表現を絞り込む助けました。 今はすべてがうまく機能しています。

関連する問題