也許這會有所幫助:
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