Проблема
Ваш тест, чтобы проверить, вернул ли re.findall
требуемое значение, содержит ошибки. Ваш чек:
if test != None:
всегда будет верным, и вы всегда добавите любое значение word
к wkar
. Из документации (предполагается, что python3, но поведение не меняется):
re.findall ( pattern, string, flags = 0 )
Вернуть все неперекрывающиеся совпадения шаблона в строке, как список строк ... Пустые совпадения включены в результат .
(выделение мое)
Пустой список не None
, то есть wkar
содержит все значения в вашем предложении. (Интересно, что это полная противоположность поведению, которое вы упомянули в начале вашего вопроса.)
Решение
Не используйте регулярное выражение, этонеправильный инструмент для этой работы. Это можно решить с помощью встроенных функций. Кроме того, вы получаете удар по производительности за то, что можно просто сделать в операторе if
# use the builtin split function to split sentence on spaces
sentence = sentence.split(" ")
wkar = []
# iterate over each word...
for word in sentence:
#...and see if it matches the test word
if word == 'text':
wkar.append(word)