2013-04-11 32 views
1

我已經寫了Python代碼:Python的正則表達式 - 換人

import re 

url = "www.google.com"; 
line = "../../asyouwish.html" 

num = re.sub(r'(\.\.\/)*', url, line) 
print ("Final : ", num) 

我的目的是用所提供的值,以取代../(任意次數)。 但是我沒有得到正確的輸出。我希望的結果是「www.google.com/asyouwish.html」。

我得到的是:

Final : www.google.comawww.google.comswww.google.comywww.google.comowww.google. 
comuwww.google.comwwww.google.comiwww.google.comswww.google.comhwww.google.com.w 
ww.google.comhwww.google.comtwww.google.commwww.google.comlwww.google.com 

誰能幫我,那是我出了問題! 謝謝。

回答

5

*指0或更多的出現。 +表示1或更多。您想要比賽至少有一次出現../。因此,改變*+

import re 

url = "www.google.com/" 
line = "../../asyouwish.html" 

num = re.sub(r'([.]{2}/)+', url, line) 
print ("Final : ", num) 

產生

('Final : ', 'www.google.com/asyouwish.html') 

由於re.sub將刪除1或更多的'../',你需要url後添加一個斜槓。以上,我已將正斜槓本身添加到url。如果url是不帶斜槓,你可以(作爲替代)與

num = re.sub(r'([.]{2}/)+', url+'/', line) 

添加它,當你0或更多的之間發生,r'([.]{2}/)*',每個位置匹配line中的字符與模式相匹配,因此您可以在每個間隙中進行替換。

In [9]: x = 'www.google.comawww.google.comswww.google.comywww.google.comowww.google.comuwww.google.comwwww.google.comiwww.google.comswww.google.comhwww.google.com.www.google.comhwww.google.comtwww.google.commwww.google.comlwww.google.com' 

In [13]: x.split('www.google.com') 
Out[13]: ['', 'a', 's', 'y', 'o', 'u', 'w', 'i', 's', 'h', '.', 'h', 't', 'm', 'l', ''] 
+0

很好的答案,但我會詳細說明他們爲什麼會得到所描述的結果。 – georg 2013-04-11 12:42:31

+0

使用拆分獲取最後一個元素,然後將其附加到URL似乎比使用're'更好的方式# – scottydelta 2013-04-11 12:52:26

+0

@ thg435:感謝刺激。 – unutbu 2013-04-11 13:03:17

0

使用類似

url = "www.google.com"; 
line = "../../asyouwish.html" 
link_part = line.split("/") 

final_url = url + "/" + link_part[-1]