我有一个列表(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
答案 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。