首页 > 解决方案 > Python:正则表达式搜索“Mozilla”,但如果字符串还包含“iPhone”则忽略匹配

问题描述

我正在分析博客。我有一个正则表达式来搜索模式并提取相关数据。我看的一件事是访问网络服务器并给他们计数的用户代理。如果用户使用 iPhone,它也可能在 UA 中包含 Mozilla。

57.55.39.83 - - [08/Mar/2020:18:52:38 -0700] "GET /Archive/Contentslist.htm HTTP/1.1" 200 9972 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "redlug.com"
77.247.22.51 - - [08/Mar/2020:18:53:56 -0700] "GET /logs/access_130930.log HTTP/1.1" 404 73 "http://www.purevolume.com/adapaleno" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Firefox/17.0" "redlug.com"

当字符串中不包含“iPhone”时,如何开发一个仅计算 Mozilla 用户的正则表达式?

这是我的尝试:

while (i != len(entries)):
    match = re.search(logPattern, entries[i])
    if (match):
        mozillaPattern = re.compile(r"([mM]ozilla+)(?!iPhone)")
        userAgent = match.group(7)
        mozillaMatch = re.search(mozillaPattern, userAgent)
        if (mozillaMatch):
            mozilla = mozilla + 1
    i = i + 1

output += "\nUser agents matching Mozilla (excl. iPhone): " + str(mozilla)

看起来我的正则表达式([mM]ozilla+)(?!iPhone)是错误的,因为它仍然计算两个条目,尽管第一个在其字符串中包含“iPhone”。你对像我这样的新手有什么暗示吗?谢谢,克里斯

标签: pythonregexpython-3.x

解决方案


推荐阅读