2013-08-04 35 views
0

我對Python正則表達式(通常是正則表達式)頗爲陌生,而且我一直在遇到問題。所以,我有這樣幾個字符串,以便:正則表達式和使用python替換字符串

str1 = r'''hfo/gfbi/mytag=a_17014b_82c''' 
str2 = r'''/bkyhi/oiukj/game/?mytag=a_17014b_82c&''' 
str3 = r'''lkjsd/image/game/mytag=a_17014b_82c$''' 

&$可以是任何符號。

我想有一個單一的正則表達式(和替換)它取代:

mytag=a_17014b_82c 

到:

mytag=myvalue 
從任何上述3串

。將不勝感激關於如何實現這一目標的任何指導。

更新:被替換的字符串總是不一樣。所以,a_17014b_82c可能是現實中的任何東西。

+1

被替換的字符串是否總是相同?在這種情況下,你不需要一個正則表達式。 – keyser

+0

如果它們看起來像是url,那麼'&'具有特殊含義,所以你的聲明「the&和$可以是任何符號」感覺不對。 –

+0

字符串被替換並不總是相同:( – JohnJ

回答

1

如果要替換的字符串不變,則不需要正則表達式。只需使用replace

>>> str1 = r'''hfo/gfbi/mytag=a_17014b_82c''' 
>>> str1.replace('a_17014b_82c','myvalue') 
'hfo/gfbi/mytag=myvalue' 
+0

剛剛發佈了一個更新。 - 對不起,要被替換的字符串總是不一樣的對不起,沒有說清楚第一次就 – JohnJ

1

使用re.sub

>>> import re 
>>> r = re.compile(r'(mytag=)(\w+)') 
>>> r.sub(r'\1myvalue', str1) 
'hfo/gfbi/mytag=myvalue' 
>>> r.sub(r'\1myvalue', str2) 
'/bkyhi/oiukj/game/?mytag=myvalue&' 
>>> r.sub(r'\1myvalue', str3) 
'lkjsd/image/game/mytag=myvalue$' 
+0

@Ashwini:這是真棒,你能解釋一下爲什麼你使用'\ 1' – JohnJ

+0

@JohnJ'\ 1。? '代表第一個匹配的基團,即'「mytag =」' –

+0

@AshwiniChaudhary:非常感謝你的解釋接受你的答案是打破我的頭在這了幾個小時再次感謝 – JohnJ

0
import re 
r = re.compile(r'(mytag=)\w+$') 
r.sub(r'\1myvalue', str1) 

這是基於@阿什維尼的回答,兩個小的變化,我們都在說mytag=a_17014b部分應該是在輸入的結束,所以即使輸入如

str1 = r'''/bkyhi/mytag=blah/game/?mytag=a_17014b_82c&''' 

將工作fi ne,取代最後的mytag而不是第一個。

另一個小的變化是,我們不會不必要地捕捉\w+,因爲我們沒有使用也無妨。這只是爲了一點代碼清晰。