Примечание: некоторые соображения без какого-либо кода, но я думаю, что они относятся к ответу, а не к комментарию.
Моя идея состоит в том, чтобы искать только первое ключевое слово; если совпадение найдено, ищите второе. Это позволяет вам, если совпадение найдено в конце строки, учитывать следующую строку и выполнять конкатенацию строк, только если совпадение найдено на первом месте *.
Edit:
Кодировал простой пример и в итоге использовал другой алгоритм; основная идея заключается в следующем фрагменте кода:
def iterwords(fh):
for number, line in enumerate(fh):
for word in re.split(r'\s+', line.strip()):
yield number, word
Он перебирает обработчик файла и создает кортеж (номер строки, слово) для каждого слова в файле.
Сопоставление впоследствии становится довольно простым; Вы можете найти мою реализацию в виде github . Его можно запустить следующим образом:
python search.py 'multi word search string' file.txt
Существует одна главная проблема со связанным кодом, я не кодировал обходной путь ни по причинам производительности, ни по сложности. Вы можете понять это? (Спойлер: попробуйте найти предложение, первое слово которого встречается в файле два раза подряд)
* Я не проводил никакого тестирования самостоятельно, но эта статья и python wiki предполагают, что объединение строк не так эффективно в python (не знаю как актуальная информация есть).