Более точная альтернатива findline? - PullRequest
0 голосов
/ 12 марта 2012

У меня есть список (words.txt), для которого мне нужен метод для поиска, который является более точным, чем findline.

Моя текущая функция (показанная внизу) использует findline для поиска в списке.Проблема заключается в следующем: вместо точного совпадения findline возвращает первую строку, содержащую целое слово, независимо от того, есть ли после него лучшие совпадения.

Пример: я ввожу 'BEES' и findlineвозвращает «BAUBEES», потому что это первая строка, содержащая подстроку («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 Ответ

1 голос
/ 12 марта 2012
r = re.compile(r"\b%s" % re.escape(word))
for line in openfile:
    hit = r.search(line)
    if hit:
        # whatever

Объяснение: это строит регулярное выражение из \b (границы слова) и рассматриваемого word, а затем ищет его в каждом line файла. Он находит первое слово, начинающееся с word в строке, и возвращает объект соответствия регулярному выражению .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...