正则表达式搜索调试

2024-09-30 22:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

表达式如下:

.*\[(\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)"

问题出在哪里?你知道吗

谢谢!你知道吗


Tags: httpscomhttpmozillagetnetbin表达式
2条回答

似乎你的正则表达式和你提供的两个例子都很适合我(或者我只是搞错了问题)。我用下面的脚本测试了它(很抱歉排长队):

#!/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

我想这可能就是你要找的。你知道吗

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

相关问题 更多 >