调用替换函数Regex Python

时间:2014-10-11 04:18:04

标签: python regex

每当regex表达式匹配字符串myString时,我都使用以下代码调用replace函数。我的问题是,我是否可以根据正则表达式是否与${STRING}$STRING

匹配来调用不同的替换函数
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 个答案:

答案 0 :(得分: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, 'withcool')
(None, 'withcool2')
('stuff', None)

您需要从元组中获取不是None的元素。

顺便说一句,我建议您使用\w代替.,因为您正在使用贪婪的正则表达式。