2010-06-08 33 views
2

在蟒蛇(這是一個Django的過濾器),我這樣做:值傳遞到正則表達式匹配功能

lReturn = re.sub(r'\[usecase:([ \w]+)]', r'EXTEND WITH <a href="/usecase/%s/\1/">\1</a>' % pCurrentProjectName, lReturn) 

我想使用的,而不是一個字符串的函數(這樣我就可以檢查出usercase是一個有效的名稱),所以它改成這樣:

def _match_function(matchobj): 
    lMatch = matchobj.group(1) 
    return "EXTEND WITH <a href='/usecase/%s/%s/'>%s</a>" % (pCurrentProjectName, lMatch, lMatch) 

lReturn = re.sub(r'\[usecase:([ \w]+)]', _match_function, lReturn) 

我如何pCurrentProjectName進入_match_function()函數?

回答

4

您可以創建一個返回函數(closure)功能:

def _match_function(name): 
    def f(matchobj): 
     lMatch = matchobj.group(1) 
     return "EXTEND WITH <a href='/usecase/%s/%s/'>%s</a>" % (name, lMatch, lMatch) 
    return f 

lReturn = re.sub(r'\[usecase:([ \w]+)]', _match_function(pCurrentProjectName), lReturn) 
+0

優秀的,謝謝。 – Tim 2010-06-08 16:32:14