Упрощение составных регулярных выражений с помощью регулярных выражений Python - PullRequest
0 голосов
/ 29 мая 2019

У меня есть список составных и простых регулярных выражений, которые мне нужно упростить. Скажем ["(crazy|cute|funny)( \w+){0,5} cat", "I love( \w+){0,5} cats)"]. Мне нужно определить те, которые имеют конкретную картину. Например, я хочу определить те из них, которые содержат или ("|") , и упростить их до единого шаблона.

В приведенном выше примере я хочу преобразовать "(crazy|cute|funny)( \w+){0,5} cat в ["crazy( \w+){0,5} cat", "cute( \w+){0,5} cat", "funny( \w+){0,5} cat"]. Я не хочу менять "I love( \w+){0,5} cats)", потому что это простое и не составное регулярное выражение.

Я выдвинул следующее регулярное выражение для определения таких примеров:

re = "\((\w+{1}\|){1,10}\w+{1}\)" 

Но это не идентифицирует их. Я не уверен, что не так.

def sep_rules(search_list):
    new_query_list = list()
    for item in search_list:
        if "|" not in item:
            new_query_list.append(item)
        else:
            re = "\((\w+{1}\|){1,10}\w+{1}\)"
            print item 
            print re_search(item, re) # does not identify them correctly 

Входные данные:

["(crazy|cute|funny)( \w+){0,5} cat", "I love( \w+){0,5} cats)"] 

Ожидаемый результат:

["crazy( \w+){0,5} cat" , "cute( \w+){0,5} cat" , "funny( \w+){0,5} cat" , "I love( \w+){0,5} cats)"]

1 Ответ

0 голосов
/ 29 мая 2019

Ошибка, которую я получаю при компиляции этого шаблона, это «многократное повторение», ссылаясь на шаблон \w+{1}. Этот шаблон действительно не имеет смысла - вы в основном применяете два повторяющихся направления (+, по крайней мере, один раз и {1}, ровно один раз) к одному и тому же выражению \w.

Если вы хотите, вы можете поставить вокруг него круглые скобки, как в (\w+){1}, но вы должны знать, что наличие {1} в любом месте регулярного выражения в первую очередь избыточно; <expression>{1} в точности эквивалентно <expression>.

(Примечание. В более общем плане проблема, которую вы пытаетесь решить, - минимизация регулярных выражений - по крайней мере NP-сложна и, конечно, не решаема с помощью другого регулярного выражения. В лучшем случае вы можете применить несколько очень ограниченных особых случаев .)

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