Если это скорость, которую вы достигнете, то будет сложно превзойти набор готовых выражений регулярных выражений для каждого слова в вашем основном списке. Даже если вы придумаете супер-заявление, как вы предлагаете, ему все равно придется перебирать главный список, он просто сделает это внутри.
В Python «внутренняя» команда может иметь большое значение по сравнению с циклом (Python относительно медленный, когда выполняет собственный цикл, но многие подпрограммы кодируются в C / Assembly), но повторение в Java не добавитзначительные накладные расходы (Java почти такой же быстрый, как C для этого типа операций, и довольно легко поточить).
Я полагаю, что для «легкого» режима я бы попытался запустить двойной цикл как операцию потока Java- пусть поток многопоточный и посмотрим, что произойдет.
Более сложный режим может состоять в том, чтобы исключить классы слов, чтобы вам не приходилось смотреть слово целиком для каждого соответствия. Например, если вы извлекли все свои совпадения, которые могли бы соответствовать словам, начинающимся с «а», то вам не пришлось бы проверять слова, которые не начинаются с «а», в этой группе. Здесь может быть много хитростей, но это будет много кода, он очень быстро усложнится и, вероятно, не принесет много пользы.