2015-07-10 58 views
2

我有一個字符串,它看起來像這樣替換字符串多個變量值:使用Python正則表達式

1080p [2.1GB] 720p [1.3GB] 480p [500MB] 

在Python,我要全部更換[x],。我試過這段代碼:

import re 
s1 = '1080p [2.1GB] 720p [1.3GB] 480p [500MB]' 
s2 = re.sub("[(.*?)]", ", ", s1) 

但是,我得到這個輸出:1080p [2, 1GB] 720p [1, 3GB] 480p [500MB]

相反,我想獲得像1080p, 720p, 480p之類的東西。

回答

1

您可以使用re.split

>>> s1 = '1080p [2.1GB] 720p [1.3GB] 480p [500MB]' 
>>> ', '.join(i for i in re.split(r'\s*\[[^\]]*\]\s*', s1) if i) 
'1080p, 720p, 480p' 
1

你需要躲避支架和使用原始字符串:

s2 = re.sub(r"\[(.*?)\]", ", ", s1) 

注意字符類,這些符號之外 - .^$*+?()[{\| - 應該逃到字面匹配。

這裏是a demo

如果你不打算使用裏面的內容[...],刪除圓括號。

s2 = re.sub(r"\[.*?\]", ", ", s1) 

爲了獲得一個 「乾淨」 的字符串,你可以使用一些更復雜的正則表達式和strip()

輸出 another demo
import re 
s1 = '1080p [2.1GB] 720p [1.3GB] 480p [500MB]' 
s2 = re.sub(r"\s*\[.*?\]", ",", s1) 
print s2.strip(' ,') 

1080p, 720p, 480p

+0

但這最後增加了一個逗號和空格。 –

+0

@AvinashRaj:我明白了,但*我想要像1080p,720p,480p *這樣的東西只是意味着類似的東西,所以它確實回答了爲什麼正則表達式不起作用的主要問題。 –

+0

我添加了一個改進的解決方案。 –