查找关键字的挑战之一就是定义关键字的含义以及如何解析文件内容以找到完整的关键字集。如果“aa”是关键字,它应该匹配“aaa”还是“aa()”?关键字是否可以包含数字?
一个简单的解决方案是说关键字只是字母,并且应该匹配连续。字母字符串完全不考虑大小写,而且,比赛应该算是一行行,不是一句一句我们可以使用正则表达式查找字母序列,并设置检查遏制像这样:
keys.txt
aa bb
test.txt
aa is good
AA is good
bb is good
cc is not good
aaa is not good
test.py
import re
keyfile = "keys.txt"
testfile = "test.txt"
keys = set(key.lower() for key in
re.findall(r'\w+', open(keyfile , "r").readline()))
with open(testfile) as f:
for line in f:
words = set(word.lower() for word in re.findall(r'\w+', line))
if keys & words:
print(line, end='')
结果:
aa is good
AA is good
bb is good
添加更多的规则,你的意思是匹配什么,它变得更加复杂。
编辑
假设你有每行一个关键字,你只想要一个字符串匹配(即,“AA”匹配“AAA”),而不是关键字搜索,你可以做
keyfile = "keys.txt"
testfile = "test.txt"
keys = [key for key in (line.strip() for line in open(keyfile)) if key]
with open(testfile) as f:
for line in f:
for key in keys:
if key in line:
print(line, end='')
break
但我只是猜测你的标准是什么。
你能提供一个输入和预期输出? –
这个关键字文件的格式是什么?在一行中用空格分隔的一堆单词? – tdelaney
关键字(“AA”,“BB”): 文件包含这样一行(AA好,BB很不错,CC不好): 预期的输出为: AA好 BB是非常好的 – Saadi381