更准确的替代findline?

时间:2012-03-11 21:30:11

标签: python search python-2.7

我有一个列表(words.txt),我需要一个搜索方法比findline更精确。

我当前的功能(显示在底部)使用findline来搜索列表。问题是:findline不是返回完全匹配,而是返回包含整个单词的第一个字符串,无论后面是否有更好的匹配。

实施例: 我输入'BEES'并且findline返回'BAUBEES',因为它是第一个包含子字符串的字符串('BEES')。当然,这完全破坏了这个功能。

我需要的是一个函数或(最好)内置方法,它按字母顺序 以获得完全匹配。所以,如果'BEES'在列表中(我向你保证),我希望它返回'BEES'。或者,如果'BAUBEES'和'BEESWAX'是列表中唯一的子串匹配,理想的函数将返回'BEESWAX',如果只是因为'BEES'中的第二个字母是'E'不是'A'(如' BAUBEES')。

def iswholeword(word):
    openfile = open('/media/Gianson/Python Programs/words.txt','r')
    linz = openfile.readlines()[:]
    openfile.close()
    hit = findline(word,linz)[:]
    print 'hit', hit
    if len(hit)-1  == len(word):
        return True
    else:
        return False

1 个答案:

答案 0 :(得分:1)

r = re.compile(r"\b%s" % re.escape(word))
for line in openfile:
    hit = r.search(line)
    if hit:
        # whatever

说明:这会从\b(字边界)和正在考虑的word构建正则表达式,然后在文件的每个line中搜索它。它会在行中找到以word开头的第一个单词,并返回regexp match object

相关问题