替换表达式中的变量

时间:2013-10-21 13:15:56

标签: python regex

我正在使用regexp以字符串格式查找和替换python表达式中的变量。我不希望'var'被替换成另一个函数或变量名的一部分。 (我在expr和expr.replace(“var”等)中使用if'var'禁止解决方案。)

因此,我使用以下正则表达式检查以前的字符(允许)和以下字符(允许):

pattern = re.compile(r'(^var)(?=\+|\-|\*|\/| |$)|(?<=\+|\=|\[|\-|\*|\/|,| |\()var(?=\+|\-|\*|\/|$| |,|\))')

ô_O,它似乎很复杂,但它适用于以下测试,将'var'替换为'###'

expr     = ' var + variable + avar + var[x] + fun(var,variable) + fun2(variable, var, var1) + fun3(variable,var)+ var  -var/var+var*var*(var)'
expected = ' ### + variable + avar + var[x] + fun(###,variable) + fun2(variable, ###, var1) + fun3(variable,###)+ ###  -###/###+###*###*(###)'

我使用regexp:

    如果'var'在表达式中,则
  • ckeck
  • 替换表达式中的'var'
  • 检查替换后'var'是否在表达式中。
if pattern.search(expr):
  new_expr = re.sub(pattern, '###', expr)  
  assert not pattern.search(new_expr), 'Replace failed'

我使用代码很多时间,我想知道是否存在更简单/更快的内容?

1 个答案:

答案 0 :(得分:1)

嗯,你需要的模式是:r'\bvar\b'\b是“border”,它允许我们定义我们想要替换的完整“字符串”而不替换“变量”

然而,在测试你的“预期”字符串时,我发现它有一个错误:

expected = ' ### + variable + avar + var[x] ' # <- this last 'var' should be ###

反正。解决方案:

>>> import re
>>> re.sub(r'\bvar\b', '###', expr)
' ### + variable + avar + ###[x] + fun(###,variable) + fun2(variable, ###, var1) + fun3(variable,###)+ ###  -###/###+###*###*(###)'