我从下面的第一个代码片段开始搜索行列表,并将每行中的所有关键字(在单独的列表中标识)转换为小写.对于我的大约800行的测试列表,只要我的关键字列表是100个项目或更少,整个行列表的关键字替换只需不到一秒.当我将列表扩展到101个或更多项时,处理时间会超过9秒.
使用第二个片段(编译关键字列表的所有模式)会将总处理时间减少到1秒以下.
有谁知道为什么非编译替换搜索的处理时间对每个输入行搜索的项目数如此敏感?在100个关键词之后,我很惊讶它跳得那么厉害.
片段#1
for line in lines_in:
for keyword in keywords:
rawstring = r'\b' + keyword + r'\b'
line = re.sub(rawstring, keyword, line, 0, re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)
片段#2
for i in range(len(keywords)):
re_pattern = re.compile(r'\b' + keywords[i] + r'\b', re.IGNORECASE)
pattern.append(re_pattern)
for line in lines_in:
for i in range(len(keywords)):
line = pattern[i].sub(keywords[i], line, 0)
Run Code Online (Sandbox Code Playgroud) python ×1