每当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)
答案 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
代替.
,因为您正在使用贪婪的正则表达式。