2013-07-18 42 views
0

我一直在使用正則表達式最近,我正在尋找一種方法來改善流量控制時,必須使用許多正則表達式。更好的流量控制與Python中的re.match

這是典型的情況。

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