我正在尝试从文本中获取一些子字符串。
使用 https://pythex.org/检查我的正则表达式
pythex.org 显示我的正则表达式一切正常,但是当我尝试将它用于我的代码时,第二个正则表达式不起作用并且 re 返回
AttributeError: 'NoneType' object has no attribute '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))
如有任何帮助,我们将不胜感激!
最佳答案
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
关于python - 正确的 python 正则表达式返回 NoneType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490410/