正确的python正则表达式返回NoneType

时间:2019-02-02 05:55:28

标签: python regex python-3.x

我想从文本中得到一些子。

使用https://pythex.org/来检查我正则表达式

pythex.org表明,它的一切正确的与我的正则表达式,但是当我尝试使用它为我的代码第二正则表达式不起作用和重新返回

  

AttributeError:'NoneType'对象没有属性'group'

我想打印URI变量。只有时间戳返回。代码示例:

import re
line = "2019-01-30 01:05:26.255595500 tracker uri='/tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228' referer='https://instagram.com' ua='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0'"

timestamp = re.match("\d+-\d+-\d+.\d+:.\d+:.\d+.\d+", line)
if timestamp:
    print(timestamp.group(0))
uri = re.match("(?<=uri=\').+(?=\' ref)", line)
if uri:
    print(uri.group(0))

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

re.match仅在字符串的开头与正则表达式模式匹配时才返回匹配对象,这就是为什么您成功匹配了字符串开头的时间戳但不匹配uri字符串的原因。

使用re.search,而不是在字符串中返回匹配对象的第一位置,其中所述正则表达式的匹配。

例如:

import re

line = "2019-01-30 01:05:26.255595500 tracker uri='/tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228' referer='https://instagram.com' ua='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0'"

uri = re.search(r"(?<=uri=\').+(?=\' ref)", line)

print(uri.group(0))
# OUTPUT
# /tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228