2016-11-15 3 views
0

У меня есть строка «тогда есть», и я хочу найти точное/полное слово, например. в этом случае «the» появляется только один раз. Но используя методы index() или find(), кажется, что три раза появляется, поскольку они частично совпадают с «then» и «there». Мне нравится использовать любой из этих методов, каким-либо образом я могу настроить их на работу?Точное совпадение слов с использованием метода индекса или поиска - python

>>> s = "the then there" 
>>> s.index("the") 
0 
>>> s.index("the",1) 
4 
>>> s.index("the",5) 
9 
>>> s.find("the") 
0 
>>> s.find("the",1) 
4 
>>> s.find("the",5) 
9 
+4

use regex '\ bthe \ b' –

ответ

1

Сначала преобразуйте строку в список слов, используя str.split(), а затем выполните поиск по слову.

>>> s = "the then there" 
>>> s_list = s.split() # list of words having content: ['the', 'then', 'there'] 
>>> s_list.index("the") 
0 
>>> s_list.index("then") 
1 
>>> s_list.index("there") 
2 
+0

Производительность является проблемой для моего использования, так как это может быть очень большой файл и поэтому пытается избежать создания огромного списка ... – user3806770

+0

В любом случае это огромный файл. Либо вам нужно сохранить его как 'str', либо' list', но вам нужно его где-то сохранить. Правильно? Прочитайте содержимое как строку, сформируйте список. Если вы еще больше заинтересованы в экономии места. После того, как вы получите список, преобразуйте его в словарь со словом в качестве ключа и значением как индекс первого появления этого слова. Явно удалить переменную, которая не используется, как одна строка хранения и список –

1

Чтобы найти первое положение точных/полного слова внутри большого текста, попробуйте применить следующий подход с использованием re.search() и match.start() функции:

import re 

test_str = "when we came here, what we saw that the then there the" 
search_str = 'the' 
m = re.search(r'\b'+ re.escape(search_str) +r'\b', test_str, re.IGNORECASE) 
if m: 
    pos = m.start() 
    print(pos) 

Выход:

36 

https://docs.python.org/3/library/re.html#re.match.start

Смежные вопросы