1

とりわけ、正規表現の辞書に対してファイルをチェックする既存の python スクリプトがあります。ファイルに正規表現の 1 つが含まれている場合、辞書にヒットしたことに注意し、ファイルを含む行を出力して次に進みます。ものすごく単純。

ただし、ファイルがヒットした RE ごとに異なるコールバック関数を確立したいと考えています。長い if/elseif ブロックの外でこれを Python でどのように達成できるかについて、私は困惑しています。これは代わりに PERL で行うべきケースですか? (これは、かなりの量のコードを書き直さなければならないことを意味するため、そもそもそうしない理由です)。

可能な回避策についてこれら(投稿のリンクも)をチェックしましたが、うまくいく可能性のあるものはまだ見ていません:

Python での switch ステートメントの置き換え?

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

4

1 に答える 1

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

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

于 2012-04-11T12:03:48.717 に答える