【问题标题】:Regex search debug正则表达式搜索调试
【发布时间】:2013-01-29 04:30:34
【问题描述】:

这是表达式:

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

我的问题在哪里?

谢谢!

【问题讨论】:

  • 为什么不用kodos来调试Python正则表达式呢?它允许您逐步创建正则表达式,始终显示您可能需要的组和大部分内容。
  • 我使用 komodo,但是虽然使用 Rx Toolkit 时结果看起来不错,但在生成输出文件时我无法让它正常工作。它以某种方式不断捕获我不想要的东西,而且数据文件太大,我无法分辨异常行在哪里......

标签: python regex


【解决方案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

【讨论】:

    【解决方案2】:

    我想这可能就是您要搜索的内容。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-02
      • 2023-04-10
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多