Skip to main content
 首页 » 编程设计

python之正则表达式每次运行都会给出不同的结果

2025年05月04日23傻小

我有以下代码作为我正在处理的 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. 

有人知道为什么吗?

请您参考如下方法:

发生的事情是您的 return 关键字是循环的一部分,如 acjr stated in the comments .

这意味着循环只会运行一次迭代。

.keys() 的顺序未定义,'animal' 或 'noun' 都可以排在第一位。

一半情况下,您的代码会先获取 'noun',这会正常工作,或者会先获取 'animal',但不会有任何效果。

因此,您应该将 return 的缩进减少到循环之外。