查找關鍵字的挑戰之一就是定義關鍵字的含義以及如何解析文件內容以找到完整的關鍵字集。如果「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