re.finditer 在文本文件中查找多个匹配项的一种模式

问题描述 投票:0回答:1

我想在文本文件中搜索模式并发送找到匹配项的文件。 使用 re.finditer 因为我有两个匹配列表(要通过电子邮件发送的文件的模式和名称) 即使有多个匹配项,我也想发送一个文件。 这可能吗?

文件1:
三种 pat1 模式
拍拍 1
拍拍1

文件2:
只拍一拍2
布拉布拉

import re
import itertools

cc_files = ["file1", "file2"] 
patlist = ["pat1", "pat2"]
prglist = ["prg1", "prg2"]

for (a, b) in itertools.zip_longest(patlist, prglist):
    for cc_file in cc_files:
        for i, line in enumerate(open(cc_file)):
            for match in re.finditer(a, line):
                print('Found on line %s: %s in file %s' % (i+1, match.group(), cc_file))
                # email: filename=(b + "_" + cc_file)) </code>`

输出:
在第 1 行找到:文件 file1 中的 pat1
在第 2 行找到:文件 file1 中的 pat1
在第 3 行找到:文件 file1 中的 pat1
在第 1 行找到:文件 file2 中的 pat2
我想要:
文件 1 中的 pat1
file2 中的 pat2

python python-re
1个回答
0
投票

我认为你不需要比这更复杂的东西:

cc_files = ["file1", "file2"] 
patlist = ["pat1", "pat2"]
prglist = ["prg1", "prg2"]

for cc_file in cc_files:
    text = open(cc_file).read()
    for (a, b) in zip(patlist, prglist):
        if a in text:
            print("File", cc_file, "is program", b)
            break

我不确定你为什么使用

zip_longest
。如果两个列表中的任何一个提前结束,您可以用其余的做什么?

如果您需要行号,那么它会变得有点复杂,但不会太复杂。

© www.soinside.com 2019 - 2024. All rights reserved.