0

我在使用 python 正则表达式搜索文件时遇到了一些麻烦。

我想输入一个正则表达式列表,并在一个锯齿状列表中返回与其中一个匹配的文件行,该列表的索引方式与 rexex 列表相同,即如果一行与第一个正则表达式匹配,它将被添加:results[0].append(line)如果第二个匹配:results[1].append(line)等等...

import re

def search(path, regex_list):
     reg_list = [re.compile(regex) for regex in regex_list]
     results = reg_list.__len__()*[[]]
     with open(path, 'r') as fp:
         for line in fp:
             for i, reg in enumerate(reg_list):
                 if reg.search(line):
                     results[i].append[line]
    return results

print(search("./log", ['1234', '1233']))

我希望我的输出是:

[['log entry 1234\n'], ['log entry 1233\n']]

但我真正得到的是:

[['log entry 1234\n', 'log entry 1233\n'], ['log entry 1234\n', 'log entry 1233\n']]

我对python很陌生,所以我可能会做一些非常愚蠢的事情,有什么想法吗?

4

1 回答 1

2

通过在代码中将空列表 ( results = reg_list.__len__()*[[]]) 的列表相乘,您只需创建几个都指向同一个空列表的指针。

如果稍后某些代码将某些内容附加到该列表,则所有指针都指向该扩展列表。

而是在 init 处创建一个(不相同的)空列表列表:

[[] for reg in reg_list]
于 2013-11-04T10:47:15.193 回答