-4

これは式です:

.*\[(\d*)/(\w*)/(\d*).*"(GET|POST)\s(https?://)[a-z].*?\.([a-z]+)[^\w.-].*200

私が得ている問題は、ドメイン名にあります。.net、.cgi、.com、および .htm の両方を取得します

必要なのは .net と .com だけです。つまり、この場合に最初に表示されるドメイン、 .net.comだけです。

68.134.160.117 - - [09/Mar/2004:22:24:27 -0500] "GET http://www.glocksoft.net/cgi-bin/jenv.cgi HTTP/1.0" 200 1169 "-" "Mozilla/4.0"

220.175.18.42 - - [09/Mar/2004:22:47:30 -0500] "GET http://www.searchlikecrazy.com/cgi-bin/smartsearch.cgi?keywords=Web+Design%20&username=arongyi HTTP/1.0" 200 26166 "http://www.yourwindow.com/searchlikecrazy.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2)"

どこで問題が発生していますか?

ありがとう!

4

2 に答える 2

1

あなたが提供した両方の例で、あなたの正規表現はうまく機能しているようです(または、質問が間違っているだけかもしれません)。次のスクリプトでテストしました(長い行で申し訳ありません):

#!/usr/bin/env python

import re

lines = ['68.134.160.117 - - [09/Mar/2004:22:24:27 -0500] "GET http://www.glocksoft.net/cgi-bin/jenv.cgi HTTP/1.0" 200 1169 "-" "Mozilla/4.0"',
         '220.175.18.42 - - [09/Mar/2004:22:47:30 -0500] "GET http://www.searchlikecrazy.com/cgi-bin/smartsearch.cgi?keywords=Web+Design%20&username=arongyi HTTP/1.0" \
200 26166 "http://www.yourwindow.com/searchlikecrazy.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2)"']

regex = re.compile(r'.*\[(\d*)/(\w*)/(\d*).*"(GET|POST)\s(https?://)[a-z].*?\.([a-z]+)[^\w.-].*200')

for line in lines:
    match = regex.match(line)
    if match:
        print match.groups()

出力:

('09', 'Mar', '2004', 'GET', 'http://', 'net')
('09', 'Mar', '2004', 'GET', 'http://', 'com')

Python バージョン: 2.7.1

于 2013-01-29T05:07:10.067 に答える
0

これはおそらくあなたが探しているものだと思います。

import re

log_line = '68.134.160.117 - - [09/Mar/2004:22:24:27 -0500] "GET https://www.blog.glocksoft.net/cgi-bin/jenv.cgi HTTP/1.0" 200 1169 "-" "Mozilla/4.0"'

print re.search(r'GET\s\w{3,5}://((\w+\.?)+)', log_line).group(1)
print re.search(r'GET\s\w{3,5}://((\w+\.?)+)', log_line).group(2)

出力:

www.blog.glocksoft.net
net
于 2013-01-29T05:26:27.507 に答える