我将以下代码作为我正在处理的css预处理器的一部分。本节采用用户定义的变量并将其插入代码中。正则表达式只有在用空格,大括号,括号,逗号,引号或运算符包围时才会替换。当我运行它时,我每隔一段时间才会更换变量。
def insert_vars(ccss, variables):
for var in variables.keys():
replacer = re.compile(r"""(?P<before>[,+\[(\b{:"'])\$""" + var + """(?P<after>[\b}:"'\])+,])""")
ccss = replacer.sub(r"\g<before>" + variables[var] + r"\g<after>", ccss)
del replacer
re.purge()
return ccss.replace(r"\$", "$")
当我用
运行它时insert_vars("hello $animal, $nounification != {$noun}ification.", {"animal": "python", "noun": "car"})
返回时间的50%
hello $animal, $nounification != {car}ification.
其他50%
hello $animal, $nounification != {$noun}ification.
任何人都知道为什么?
答案 0 :(得分:1)
发生了什么事,因为return
关键字是循环的一部分,acjr stated in the comments。
这意味着循环只能运行一次迭代。
.keys()
的排序未定义,'animal'
或'noun'
可能排在首位。
有一半时间,您的代码首先获得'noun'
,这样可以正常工作,或先获得'animal'
,这将无效。
因此,您应该将return
的缩进减少到循环之外。
答案 1 :(得分:0)
def insert_vars(ccss, variables):
pattern = re.compile(r"\$(?P<key>\w+)")
def replacer(match):
return variables.get(match.group('key'), match.group(0))
return pattern.sub(replacer, ccss)