python - 计算 Python 中正则表达式匹配的出现次数
问题描述
我有一个日志检查器,它使用正则表达式从日志文件中的行中查找 IP。我想找到这些行,并计算通过 IP 匹配的相同行的总出现次数
目标是根据事件的 IP 从事件中生成统计信息。例子:
WARNING - 192.168.1.1 TIMING OUT
WARNING - 192.168.1.5 TIMING OUT
WARNING - 192.168.1.1 TIMING OUT
WARNING - 192.168.1.5 TIMING OUT
WARNING - 192.168.1.1 TIMING OUT
WARNING - 10.1.1.1 TIMING OUT
WARNING - 10.72.3.1 TIMING OUT
192.168.1.1 - 3 EVENTS
192.168.1.5 - 2 EVENTS
10.1.1.1 - 1 EVENT
10.72.3.1 - 1 EVENT
等等等等。我是 python 新手,所以我仍在学习最适合此目的的方法。到目前为止,我打开了日志文件,使用正则表达式模式执行 for 循环以查找每一行中的 IP,但从那里我有点迷失了。干杯。
解决方案
您可以使用re.findall
此处捕获所有 IP 地址事件,然后使用映射来计算出现次数:
inp = """WARNING - 192.168.1.1 TIMING OUT
WARNING - 192.168.1.5 TIMING OUT
WARNING - 192.168.1.1 TIMING OUT
WARNING - 192.168.1.5 TIMING OUT
WARNING - 192.168.1.1 TIMING OUT
WARNING - 10.1.1.1 TIMING OUT
WARNING - 10.72.3.1 TIMING OUT"""
matches = re.findall(r'\bWARNING - (\b\d+\.\d+\.\d+\.\d+\b)', inp)
d = {}
for elem in matches:
try:
val = d.get(elem) or 0
d[elem] = val + 1
except KeyError:
d[elem] = d[elem]
print(d)
这打印:
{'10.1.1.1': 1, '192.168.1.5': 2, '10.72.3.1': 1, '192.168.1.1': 3}
推荐阅读
- arrays - 在视图模型中使用数组
- python - Django找不到一个模板三出 - 奇怪的行为
- c++ - 当我们将一个类的一个 shared_ptr 分配给另一个时,是否有必要重载“=”运算符?
- r - 计算R中数据框两列中每组的唯一值
- powerbi - Power BI Slicer 会影响某些视觉效果,但不会影响其他视觉效果
- react-native - 使用本机反应将base64转换为图像文件
- java - 您可以格式化西班牙时间字符串 (Java) 以强制 AM/PM 大写吗?
- python - 在数据框字典中合并数据框
- javascript - 如何将对象作为方法输入参数而不是作为参数数组传播?
- javascript - 当我使用 http url 时,axios 一直在进行 https 调用?