【问题标题】:why do i get stuck extracting data from this log data using regex?为什么我无法使用正则表达式从该日志数据中提取数据?
【发布时间】:2021-01-20 21:50:11
【问题描述】:

我有一个日志数据文件,我正在尝试从中提取此信息

示例 = {"主机":"146.204.224.152", "user_name":"feest6811", "时间":"21/Jun/2019:15:45:24 -0700", "request":"POST /incentivize HTTP/1.1"}

sample = '146.204.224.152 - feet6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 302 4622'

当我试图退出时,我得到了 [] 空列表

re.findall('(\d{3}.\d{3}.\d{3}.\d{3}( - )([\w]*)(\[.*\]))',sample)

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您的空格不正确。这是一个生成 dict 示例的版本:

    import re
    from pprint import pprint
    
    example = {"host":"146.204.224.152", "user_name":"feest6811", "time":"21/Jun/2019:15:45:24 -0700", "request":"POST /incentivize HTTP/1.1"}
    sample = '146.204.224.152 - feest6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 302 4622'
    m = re.match(r'(?P<host>\d{3}.\d{3}.\d{3}.\d{3}) - (?P<user_name>\w*) \[(?P<time>.*?)\] \"(?P<request>.*?)\"',sample)
    assert example == m.groupdict()
    pprint(m.groupdict())
    

    输出:

    {'host': '146.204.224.152',
     'request': 'POST /incentivize HTTP/1.1',
     'time': '21/Jun/2019:15:45:24 -0700',
     'user_name': 'feest6811'}
    

    【讨论】:

      【解决方案2】:

      我不确定您到底想要达到什么目标。但是,根据您给出的示例,我已经修复了您的正则表达式。

      固定正则表达式:(\d{3}.\d{3}.\d{3}.\d{3})\s*\-\s*(\w+)\s+\[(.*?)\]\s+\"(.*?)\"

      您可以查看在线工作示例here

      【讨论】:

        【解决方案3】:

        您当前的正则表达式存在许多问题,主要是模式实际上与输入不匹配。出现这种情况是因为您在一些地方缺少空格,而且您没有正确匹配双引号术语。试试这个版本:

        sample = '146.204.224.152 - feest6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 302 4622'
        parts = re.findall(r'^(\d{3}(?:\.\d{3}){3}) - (\S+) \[(.*?)\] "(.*?)".*$', sample)
        print(parts)
        

        打印出来:

        [('146.204.224.152', 'feest6811', '21/Jun/2019:15:45:24 -0700', 'POST /incentivize HTTP/1.1')]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-13
          相关资源
          最近更新 更多