首页 > 解决方案 > 来自行的Python条带模式匹配

问题描述

我正在尝试使用此代码通过日志文件上的模式匹配来去除时间戳

        searchfile = open(file, "r")
        pattern1 = ("STRING1", "STRING2")
        pattern2 = ("STRING1", "STRING3")
        for line in searchfile:
            if all(s in line for s in pattern1):
                time1 = line.strip().split()
                print("Start: " + time1[3])
            if all(s in line for s in pattern2):
                time2 = line.strip().split()
                print("End: " + time2[3])

但是,当我运行它时,“结束”打印出现两次,第一个“结束”继承了“开始”的值

下面的输出;

Start: 00:00:01:543
End: 00:00:01:543
End: 00:00:01:841
Start: 00:00:05:645
End: 00:00:05:645
End: 00:00:05:903
Start: 00:00:12:408
End: 00:00:12:408
End: 00:00:12:640
Start: 00:00:14:648
End: 00:00:14:648
End: 00:00:14:871
Start: 00:00:22:677
End: 00:00:22:677
End: 00:00:22:916

我不能在“结束”时间有另一个 for 循环,因为它不会导致连续的“开始-结束”输出。我尝试为“结束”时间分配不同的变量名称,但结果仍然相同。

标签: python-2.7

解决方案


刚刚发现问题出在pattern2字符串过滤器上。旧的条件字符串产生两个结果集,其中还包括 pattern1 的结果集。需要在模式 2 中包含另一个标准字符串,它现在可以工作。

Start: 00:00:01:543
End: 00:00:01:841
Start: 00:00:05:645
End: 00:00:05:903
Start: 00:00:12:408
End: 00:00:12:640
Start: 00:00:14:648
End: 00:00:14:871
Start: 00:00:22:677
End: 00:00:22:916
Start: 00:00:27:419
End: 00:00:27:649
Start: 00:00:31:633
End: 00:00:31:858
Start: 00:00:35:605
End: 00:00:35:857
Start: 00:00:40:314
End: 00:00:40:597
Start: 00:00:41:875
End: 00:00:42:110

推荐阅读