我想搜索一个带有句子的文件,然后用某些单词输出句子。我写了这段代码来做到这一点。
def finding(q):
for item in sentences:
if item.lower().find(q.lower()) != -1:
list.append(item)
for sentence in list:
outfile.write(sentence+'\r\n')
finding('apple')
finding('banana')
问题是这会找到子串而不是单词。所以例如句子'appletree很大'。也会被提取出来。
答案 0 :(得分:2)
将该行分为单词;最简单的方法是使用str.split()
:
for line in sentences:
if any(q.lower() == word.lower() for word in line.split()):
outfile.write(line + '\n')
您也可以添加.strip('?!."()')
来删除最常见的标点符号。
请注意,如果您写出\r\n
,在文本模式下打开的Python文件已经在Windows上使用\n
。上面的代码直接将匹配的行写入输出文件。
或者,使用正则表达式查找匹配项:
import re
def finding(q, sentences, outfile):
pattern = re.compile(r'\b{}\b'.format(re.escape(q), flags=re.IGNORE)
for line in sentences:
if pattern.match(line)
outfile.write(line + '\n')
re.IGNORE
使匹配忽略大小写,\b
添加字边界,re.escape()
从输入查询中删除任何表达式元字符。
答案 1 :(得分:1)
替代方案:
sentences = [
'this has a banana',
'this one does not',
'bananatree should not be here',
'go go banana go'
]
import re
found = filter(re.compile(r'\bbanana\b', flags=re.I).search, sentences)
# ['this has a banana', 'go go banana go']