python - 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”。你对像我这样的新手有什么暗示吗?谢谢,克里斯
解决方案
推荐阅读
- android - ADB 无法连接到守护进程
- tensorflow - 如何安装tensorflow==2.3.0
- python - 如何使用循环来调整路径名
- reactive-programming - Spring WebFlux如何合并Mono Objects的结果?
- java - 如何在 libgdx 中创建非常简单的暂停/恢复游戏
- google-maps - 在生产环境中启用 google maps api key
- angular - Stencil 全局样式在发布包并在 Angular 中使用后未应用
- react-native - useEffect 和 useState 未在 fetch 中设置值
- android - 在视图寻呼机 2 中禁用垂直滚动
- excel - 通过 PowerShell 将 .odc 文件导入 Excel