也许这有帮助:
value = "addr = &myvariable;"
findVar = "myvariable"
m = re.findall("[&]{0};".format(findVar), value)
print m
# prints: ['&myvariable;']
请注意,我通过将 & 符号放在 [] 中来避开它。你也可以用两个反斜杠转义它:
m = re.findall("\\&{0};".format(findVar), value)
编辑:
这是基于评论中讨论的 re.sub 版本:
value = "addr = &myvariable;\naddr = &myvariable;\nfuncCall( &myvariable )"
oldVarName = "myvariable"
newVarName = "mynewvariable"
m = re.sub("(\\&){0}(;?)".format(oldVarName), r"\1"+newVarName+r"\2", value)
print m
# this will print:
# addr = &mynewvariable;
# addr = &mynewvariable;
# funcCall( &mynewvariable )
此模式将具有与以下相同的结果:
value.replace("&"+oldVarName,"&"+newVarName)
我使用括号来匹配开头的 & 和结尾的可能分号。然后我使用 \1 和 \2 将这些匹配项放回替换字符串中。请注意,此结果类似于使用: value.replace("&"+oldVarName, "&"+newVarName)
编辑:
这可能更接近你所需要的。
它替换了以 & 符号开头的每个实例,并且包含整个旧变量名称,并且不包含后面 [A-Za-z0-9_] 中的任何字符。
value = "addr = &myvariable;\naddr = &myvariable;\nfuncCall( &myvariable )\nfuncCall2( &myvariable, &myvariablelongername )"
oldVarName = "myvariable"
newVarName = "mynewvariable"
m = re.sub("(\\&){0}(?![A-Za-z0-9_])".format(oldVarName), r"\1"+newVarName, value)
print m
# prints:
# addr = &mynewvariable;
# addr = &mynewvariable;
# funcCall( &mynewvariable )
# funcCall2( &mynewvariable, &myvariablelongername )
(最后一部分是 C 中变量名中的任何有效字符,在需要以 [A-Za-z_] 开头的第一个字符之后。'nhahtdh' 的答案中也提到了这一点)
使用 nhahtdh 提供的内容作为示例,这将是上一个示例的较短版本:
re.sub("(\\&){0}(?!\b)".format(oldVarName), r"\1"+newVarName, value)
由于在编写此答案时对我来说是新的,并且我自己在此答案中的评论中混淆了我将其添加为信息:r在像 r"\1" 这样的字符串前面将字符串变成原始细绳。
r '保留\的原始字符串(文字化):对于正则表达式和Windows路径很方便!' 来源:http ://rgruet.free.fr/PQR26/PQR2.6.html#Strings