оптимизировать поиск регулярных выражений Python - PullRequest
0 голосов
/ 04 мая 2018

Код

def search(self, arg1, arg2):
    global ipv4_regex, type_regex

    if isinstance(arg2, type_regex):
        text = re.search(arg2, arg1)
        if text:
            p = text.group()
            return len(p)
        else:
            return 0
    else:
        if arg2 in arg1:
            return len(arg2)
        else:
            return 0

У меня есть скрипт на python, в котором для обслуживания одного запроса эта функция пересчитывается примерно 452900 раз (для определения этого значения используется профилирование кода с использованием pprofile), чтобы выдать вывод.

Некоторые замечания по поводу функции:

arg1 = string
arg2 = ith string/regex

По сути, arg2 - это экземпляр ith длинного списка регулярных выражений / строк, который необходимо сопоставить с порядком arg1 (arg1 остается неизменным для одного запроса), чтобы найти подходящую длину.

Я придумал эту функцию, но время и загрузка процессора становятся для меня узким местом. Из-за множества поисковых операций, ЦП очень скоро поднимется.

Какие идеи я думал до сих пор

  1. Используйте словарное понимание вместо if-else как предложено здесь
  2. Используйте какой-нибудь древовидный поиск, как мы делаем для строк.

обе эти идеи на данный момент являются простыми, я не могу воплотить их в жизнь.

У меня нет контроля над регулярными выражениями в arg2, поэтому оптимизация регулярных выражений здесь не поможет.

Пожалуйста, предложите, я ищу идеи о том, как я могу оптимизировать эту функцию?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...