得到单词而不是子串

时间:2013-12-21 16:09:00

标签: python function substring words

我想搜索一个带有句子的文件,然后用某些单词输出句子。我写了这段代码来做到这一点。

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很大'。也会被提取出来。

2 个答案:

答案 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']