Python 替换表达式中的变量
我使用regexp查找并替换python表达式中字符串格式的变量。我不希望“var”被替换为另一个函数或变量名的一部分。(我禁止在expr和expr.replace(“var”等)中使用if'var'的解决方案) 因此,我使用以下regexp检查前面的字符(允许)和下面的字符(允许):Python 替换表达式中的变量,python,regex,Python,Regex,我使用regexp查找并替换python表达式中字符串格式的变量。我不希望“var”被替换为另一个函数或变量名的一部分。(我禁止在expr和expr.replace(“var”等)中使用if'var'的解决方案) 因此,我使用以下regexp检查前面的字符(允许)和下面的字符(允许): pattern = re.compile(r'(^var)(?=\+|\-|\*|\/| |$)|(?<=\+|\=|\[|\-|\*|\/|,| |\()var(?=\+|\-|\*|\/|$| |,|\
pattern = re.compile(r'(^var)(?=\+|\-|\*|\/| |$)|(?<=\+|\=|\[|\-|\*|\/|,| |\()var(?=\+|\-|\*|\/|$| |,|\))')
我使用regexp:
- 如果“var”在表达式中,则检查
- 替换表达式中的“var”的步骤
- 检查“var”在被替换后是否不在表达式中
if模式搜索(expr):
new_expr=re.sub(模式“####”,expr)
assert not pattern.search(new_expr),“Replace failed”
我经常使用代码,我想知道是否存在更简单/更快的东西?嗯,您需要的模式是:
r'\bvar\b'
,\b
是“边框”,它让我们定义要替换的完整“字符串”,而不必替换“变量”之类的东西
但是,在测试您的“预期”字符串时,我发现它有一个错误:
expected = ' ### + variable + avar + var[x] ' # <- this last 'var' should be ###
regex不是解析编程语言的首选工具。查看ast模块。你没有替换
var[x]
中的var
,这似乎很奇怪-这是故意的,还是打字错误?这不是错误,我不希望var是一个dict。它看起来像是一个例外的边界。我不确定你在说什么,但有效的代码不会处理命名空间中具有相同名称的两个变量var
isvar
isvar
。我是否编写了一个复杂的regexp来匹配转储表达式?我会检查密码,我会给你答案。你说得对,这不是真实情况。测试regexp的更好方法是使用表达式列表和预期表达式列表。解决方案与“\b”一起工作。我编写此示例是为了不匹配以下情况:avar[x]=>a###[x],即使是var[x],但var[x]在我的代码中也永远不存在。”\b’够了。谢谢。
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,###)+ ### -###/###+###*###*(###)'