Вы должны создать регулярное выражение для каждого слова, которое вы ищете. Выражение .*?
между каждой буквой является не жадным шаблоном, который позволит избежать возврата (по крайней мере, некоторых из них) и ускорит поиск.
Например, регулярное выражение для слова «дано» будет g.*?i.*?v.*?e.*?n
import re
def hidden_words(needles, haystack):
for needle in needles:
regex = re.compile(('.*?').join(list(needle)))
if regex.search(haystack):
yield needle
needles = ['each', 'expressions', 'flags', 'in', 'from',
'given', 'line', 'of', 'once', 'lines', 'no']
print(*hidden_words(needles, 'flamingoes'), sep='\n')