2015-07-10 72 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

我添加了一个改进的解决方案。 –