2014-10-11 2 views
0

정규 표현식이 문자열 myString과 일치 할 때마다 다음 코드를 사용하여 replace 함수를 호출합니다. 내 질문은 정규식이 ${STRING}과 일치하거나 내가 생각 $STRING대체 함수 호출하기 Regex Python

def replace(match): 
    match = match.group() 

    if matched == ${STRING} 
     return os.getenv(match[1:],'') 
    elif matched == $STRING: 
     return something else 
    else: 
     return error 

def main() 
    myString = "my string ${withcool} $stuff" 
    re.sub("\$.+|\$\{.+\}",replace,myString) 
+1

호출 할 함수를 결정하려면 함수 또는 최소한 간단한 λ식이 필요합니다. – grc

답변

0

당신이 변수를 추출하고 평가할지 여부를 내가에 따라 다른 대체 함수를 호출 할 수 있는지 여부입니다.

그렇다면 변수를 추출하는 데 다른 함수를 호출 할 필요가 없습니다. 괄호 (그룹 캡처)를 사용하여 추출 할 수 있습니다.

처럼 : 그것은 것

def replace(match): 
    print match.groups() 
s='my string ${withcool} ${withcool2} $stuff' 
re.sub(r'\$\{(\w+)\}', replace, s) 

을 제공합니다

('withcool',) 
('withcool2',) 

당신이 볼 때, 변수가 이미 추출됩니다.

하지만 두 개 이상의 패턴을 일치 시키려면 약간 복잡 할 것입니다.

당신이 re.sub(r'\$(\w+)|\$\{(\w+)\}', replace, s)를 사용하는 경우

match.groups()는 다음과 같습니다 당신은 튜플에서 None없는 요소를 얻을 필요가

(None, 'withcool') 
(None, 'withcool2') 
('stuff', None) 

.

동의어, greedy regex를 사용하는 경우 . 대신 \w을 사용하는 것이 좋습니다.