Какой самый быстрый способ найти все самые длинные совпадения в строке при большом наборе комбинаций клавиш? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть набор шаблонов (подстрок), и мне нужно найти все самые длинные совпадения в любой заданной строке. Теперь я могу думать только о подходе с регулярным выражением, в котором шаблоны сортируются по длине в обратном порядке и затем объединяются:

import re
pattern_set = {pattern_0, pattern_1, ..., pattern_n}
pattern_list = sorted(list(pattern_set), key=len, reverse=True)
pattern = r'(%s)' % '|'.join(pattern_list)
matches = re.findall(pattern, string)

Но я думаю, что этот подход немного примитивен и должен стоить больше времени, поскольку набор шаблонов увеличивается в размерах. Интересно, есть ли лучший подход. Как такие задачи обычно выполняются в промышленности?

1 Ответ

0 голосов
/ 06 мая 2018

Проверьте rure , что намного лучше при оптимизации чередований (|), чем встроенный в Python механизм регулярных выражений, с использованием конечных автоматов.

...