我有一个现有的python脚本,除其他外,它根据正则表达式的字典检查文件。如果文件包含一个正则表达式,我会注意到已经打了一个字典,打印包含该文件的行并继续。很简单。
但是我现在想要为文件命中的每个RE建立一个不同的回调函数。我很困惑如何在long if / elseif块之外的python中实现这一点。这是一个应该在PERL中完成的情况吗? (这意味着我必须重新编写相当多的代码,因此首先不这样做的原因。)
我已经检查了这些(甚至帖子中的链接)可能的解决方法,但还没有看到任何可行的方法:
Replacements for switch statement in Python?
https://stackoverflow.com/questions/374239/why-doesnt-python-have-a-switch-statement
答案 0 :(得分: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
然后,在每个正则表达式匹配中,您将调用与该行和正则表达式结果相关联的回调。