2013-07-18 2 views
0

В последнее время я работаю с регулярными выражениями, и я ищу способ улучшить управление потоком при использовании многих регулярных выражений.Лучшее управление потоком с re.match в python

Это то, что обычно выглядит.

result = re.match(string, 'C:') 
if result: 
    #do stuff here 
else: 
    result2 = re.match(string, 'something else') 

if result2: 
    #do more stuff 
else: 
    result3 = re.match(string, 'and again') 

. 
. 
. 

Мне бы очень хотелось иметь что-то типа.

MatchAndDo(string, regex_list, function_pointer_list) 

Или еще лучший способ делать вещи.

+0

Итак, вы хотите принять некоторые меры в зависимости от первого выражения, который соответствует? –

+0

Да, я хотел бы изменить то, что мое действие зависит от того, какой матч я получаю. Несколько раз я хочу продолжить поиск, в других случаях мне просто нужен первый матч. Мои мыслительные процессы состояли в том, что с помощью regex_list и function_pointer_list я мог бы просто попсовать, если бы захотел продолжить использование слов. – AlexLordThorsen

+0

Обновлен мой ответ на основе вашего последнего комментария. Остановка или продолжение контролируется третьим параметром в списке шаблонов – twil

ответ

1

Вы можете сделать это с

patterns = (
    #(<pattern>, <function>, <do_continue>) 
    ('ab', lambda a: a, True), 
    ('abc', lambda a: a, False), 
) 

def MatchAndDo(string, patterns): 
    for p in patterns: 
     res = re.match(p[0], string) 
     if res is None: 
      continue 

     print "Matched '{}'".format(p[0]) 
     p[1](p[0]) # Do stuff 
     if not p[2]: 
      return 

MatchAndDo('abc', patterns) 

re.match() Обратите внимание, что соответствует символам с начала строки http://docs.python.org/2.7/library/re.html?highlight=re.match#re.match

Смежные вопросы