2012-04-11 18 views
1

私は、他のものの中でも正規表現の辞書をチェックする既存のpythonスクリプトを持っています。ファイルに正規表現のいずれかが含まれている場合は、辞書ヒットが行われていることに注意し、ファイルを含む行を印刷して移動します。ものすごく単純。Pythonの辞書検索結果用のコールバック関数

しかし、私は今、ファイルにヒットしたREごとに異なるコールバック関数を設定したいと考えています。私はこれが長いif/elseifブロックの外でPythonでどのように達成できるのか疑問に思う。これは代わりに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 

次に、各正規表現の一致で、行に関連付けられたコールバックを呼び出します。 d正規表現の結果。

関連する問題