在文件中搜索正则表达式列表,Python
我在使用python正则表达式搜索文件时遇到了一些问题 我想输入一个正则表达式列表,并返回一个锯齿状列表中与其中一个匹配的文件行,该列表的索引方式与rexex列表相同,即,如果一行与第一个正则表达式匹配,它将添加:在文件中搜索正则表达式列表,Python,python,regex,file,search,Python,Regex,File,Search,我在使用python正则表达式搜索文件时遇到了一些问题 我想输入一个正则表达式列表,并返回一个锯齿状列表中与其中一个匹配的文件行,该列表的索引方式与rexex列表相同,即,如果一行与第一个正则表达式匹配,它将添加:results[0]。追加(行),如果第二个匹配:results[1]。追加(行)等等 import re def search(path, regex_list): reg_list = [re.compile(regex) for regex in regex_list
results[0]。追加(行)
,如果第二个匹配:results[1]。追加(行)
等等
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非常陌生,所以我可能会做一些非常愚蠢的事情,知道它是什么吗?通过将空列表(
results=reg\u list)乘以。在代码中,只需创建几个指针,所有指针都指向同一个空列表
如果某个代码后来向该列表追加了某些内容,则所有指针都指向该扩展列表
而是在初始化时创建一个(不相同的)空列表列表:
[[] for reg in reg_list]
我建议为描述regexp模式的字符串命名,编译版本为regexp,在应用match
后,我将它们称为matches,以避免像regex和reg这样的混淆。但这不是这里的主题。