2012-04-11 3 views
1

У меня есть существующий скрипт python, который, помимо прочего, проверяет файл на словарь регулярных выражений. Если файл содержит одно из регулярных выражений, я отмечаю, что был сделан удар по словарю, распечатайте строку, содержащую файл, и перейдите к ней. Довольно просто.Функция обратного вызова для результатов поиска словаря в python

Однако теперь я хочу установить другую функцию обратного вызова для каждого RE, в котором есть файл. Я озадачен тем, как это можно сделать в python за пределами длинного блока if/elseif. Это случай, когда это должно быть сделано в PERL? (Это означает, что я должен переписать довольно много кода, следовательно, причина для этого не в первую очередь).

Я проверил это вне (даже ссылки на посты) для возможных обходных, но до сих пор не видел ничего, что могло бы работать:

Replacements for switch statement in Python?

https://stackoverflow.com/questions/374239/why-doesnt-python-have-a-switch-statement

+0

Включает ли каждый RE обратный вызов одну и ту же функцию? Если это так, вы можете сохранить функцию в словаре вместе со счетчиком и просто вызвать его. –

+0

Нет, мне нужна другая функция обратного вызова для каждого RE. – WildBill

ответ

4

Вы могли бы сделать что-то вроде этого:

def callback1(line, regex_match): 
    #do what you want 

def callback2(line, regex_match): 
    #do what you want... else 


regex_dict = { 
    "first_regex" : callback1, 
    "second_regex" : callback2, 
} 

file_to_check = open("the_file") 
for line in file_to_check: 
    for regex, callback in regex_dict.iteritems(): 
     result = re.match(regex, line) 
     if result: 
      callback(line, result) 
      break 

Затем в каждом регулярном выражении вы вызываете обратный вызов, связанный с линией a d результат регулярного выражения.

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