Python поиск строки: как найти точные совпадения, а не совпадать со строками, которые содержат искомую строку в них - PullRequest
1 голос
/ 11 марта 2020

Мне нужен мой скрипт, чтобы вызвать определения для разных слов.

Я использую al oop для поиска совпадений между элементом в строке (X) и массивом.

if any(i in X for i in ('coconut, Coconut')):
    print("found coconut")

if any(i in X for i in ('nut', 'Nut')):
    print("found nut")

Проблема в том, когда элемент в массиве X - это слово, содержащее другое слово (например, кокос и орех), оба отпечатка выполняются.

Как мне убедиться, что, когда в массиве X есть элемент с именем кокос, я получу отпечаток только для кокоса, и не за орех?

Буду вечно благодарен за любую помощь.

Ответы [ 4 ]

0 голосов
/ 12 марта 2020

Спасибо всем, я понял это.

В этом случае достаточно было добавить пробел перед более коротким ключевым словом.

0 голосов
/ 11 марта 2020

Это должно работать - i в X проверяет, найдена ли подстрока i в строке X, а проверяет, эквивалентны ли они.

if any(i == X for i in ('nut', 'Nut'):
    print('found nut')
0 голосов
/ 11 марта 2020

вы можете преобразовать вашу строку X в набор:

sx = set(X.split()) # to get the words you may use a regex, depending of how X looks
if sx & {'coconut, Coconut'}:
    print("found coconut")
0 голосов
/ 11 марта 2020

Вы можете проверить равенство отдельных строк, а не наличие слова в массиве X (обычно называемом list в python, если вы не используете numpy):

if any(i == x for i in ('coconut', 'Coconut') for x in X):
    print("found coconut")

if any(i == x for i in ('nut', 'Nut') for x in X):
    print("found nut")

или еще лучше, вы можете сначала преобразовать тестовую строку в нижний регистр, так что для каждого слова необходим только один символ для l oop:

if any(x.lower() == "coconut" for x in X):
    print("Found coconut")

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

Если X - строка, для этого подойдет простая проверка на равенство:

if X.lower() == "coconut":
    print("Found coconut")
...