也许这会有所帮助:
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)
编辑: 这可能是更接近你所需要的。
它取代了以AND开头的所有实例AND包含整个旧的变量名称,并且不包含之后在[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提供作为实例提到这将是最后一个例子的一个较短的版本:
既然写这个的时候是新的我回答并得到了由自己在这个答案混杂在评论中,我将以此为信息:[R在如R字符串前面的“\ 1”转串入一个原始字符串。
r'一个原始字符串,其中\被保留(文字化):方便正则表达式和窗口路径!' 来源:http://rgruet.free.fr/PQR26/PQR2.6.html#Strings
那么你认为什么水平的解决方案可以接受?你知道正则表达式的解决方案很容易破解,但是你是否有一些假设? – nhahtdh 2013-02-11 14:33:22
你知道这将是int吗?你为什么不在变量前面检查'='并替换它?像'=。* myvariable'。 – ATOzTOA 2013-02-11 14:39:09
我想忽略范围和'字符* myStr的=“MYVARIABLE”的解决方案;'的问题,但没有别的 – James 2013-02-11 14:49:13