正确的python regexp返回NoneType

正确的python regexp返回NoneType,python,regex,python-3.x,Python,Regex,Python 3.x,我正在尝试从文本中获取一些子字符串 用于检查我的正则表达式 org显示我的regexp一切正常,但当我尝试在代码中使用它时,第二个regexp不起作用,re返回 AttributeError:“非类型”对象没有属性“组” 我想打印uri变量。只返回时间戳。代码示例: import re line = "2019-01-30 01:05:26.255595500 tracker uri='/tracker_log/?f=__lxGc__&step=1&ses_id=2yz65vcs

我正在尝试从文本中获取一些子字符串

用于检查我的正则表达式

org显示我的regexp一切正常,但当我尝试在代码中使用它时,第二个regexp不起作用,re返回

AttributeError:“非类型”对象没有属性“组”

我想打印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))
重新导入
line=“2019-01-30 01:05:26.255595500跟踪器uri=”/tracker\u log/?f=\uuuuuuu lxGc\uuuuu&step=1&ses\uid=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228'referer=”https://instagram.com“ua='Mozilla/5.0(Macintosh;英特尔Mac OS X 10.13;rv:58.0)Gecko/20100101 Firefox/58.0'”
timestamp=re.match(“\d+-\d+-\d+。\d+:。\d+:。\d+。\d+”,第行)
如果时间戳:
打印(时间戳组(0))

uri=re.match(“(?
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
重新导入
line=“2019-01-30 01:05:26.255595500跟踪器uri=”/tracker\u log/?f=\uuuuuuu lxGc\uuuuu&step=1&ses\uid=2yz65vcsg0k8zk1952295510&id=123123&type=ad&rt=952301228'referer=”https://instagram.com“ua='Mozilla/5.0(Macintosh;英特尔Mac OS X 10.13;rv:58.0)Gecko/20100101 Firefox/58.0'”

uri=re.search(r“(?),您的代码正在为我工作。@TimBiegeleisen操作需要输出两个东西(datetime和uri)如果你将
re.match
更改为
re.search
,正如@benvc正确建议的那样,那么OP的问题就解决了。你可以完全避免使用正则表达式,正如俗话所说:有些人在遇到问题时会想“我知道,我会使用正则表达式。”。“现在他们有两个问题。例如,
uri\u str=next(filter(lambda str:str.startswith('uri'),line.split(“”))