Много паттернов и одна строка

Рейтинг: 2Ответов: 1Опубликовано: 06.07.2011

Приветствую,

Есть много regex шаблонов и одна строка. Ищу разумный способ определить, какой из шаблонов совпадает со строкой.

В данный момент прогоняю строку по циклу из шаблонов и проверяю, совпадает ли она со шаблоном.

import re
patterns = [ (re.compile("^/upload/test/$"), "upload"),
             (re.compile("^/download/test/$"), "download"),
             (re.compile("^/test/$"), "test")]
string = "/test/"

for pattern in patterns:
    if pattern[0].match(string):
        print pattern[1]

Есть ли способ лучше?

Ответы

▲ 3Принят

У вас выбран вполне годный способ. При беглом прочтении джанговсокого урлресолвера вроде становиться понятно, что у них все так же как у вас.

Не сильно относиться к делу но это

patterns = [ (re.compile("^/upload/test/$"), "upload"),
             ... ]

можно поменять на

patterns = ( (re.compile("^/upload/test/$"), "upload"),
             ... )

Вроде вот тут доказано что tuple(простите, не знаю как перевести) быстрее list в инициации и итерации.