2017-05-04 54 views
0

有没有可能减少此代码?蟒蛇减少代码替换相同的名称

Nomefilm = selected_channel[1] 
    Nomefilm = Nomefilm.replace('.','').replace('-','').replace('(','').replace(')','').replace('[HD]','').replace('2013','').replace('2014','').replace('2015','').replace('2016','') 
    Nomefilm = Nomefilm.replace('PrimaVisione 1','').replace('PrimaVisione 2','').replace('PrimaVisione 3','').replace('PrimaVisione 4','').replace('PrimaVisione 5','').replace('PrimaVisione 6','').replace('PrimaVisione 7','') 
    Nomefilm = Nomefilm.replace('PrimaVisione 8','').replace('PrimaVisione 9','').replace('PrimaVisione 10','').replace('PrimaVisione 11','').replace('PrimaVisione 12','').replace('PrimaVisione 13','').replace('PrimaVisione 14','') 
    Nomefilm = Nomefilm.replace('PrimaVisione 15','').replace('PrimaVisione 16','').replace('PrimaVisione 17','').replace('PrimaVisione 18','').replace('PrimaVisione 19','').replace('PrimaVisione 20','').replace('PrimaVisione 21','') 
    Nomefilm = Nomefilm.replace('Primafila 1-2','').replace('Primafila 3-4','').replace('Primafila 5-6','').replace('Primafila 7-8','').replace('Primafila 9-10','').replace('Primafila 11-12','').replace('Primafila 13-14','').replace('Primafila 15','') 
    Nomefilm = Nomefilm.replace('Primafila 16-17','').replace('Primafila 18','').replace('Primafila 19','') 
+5

显示最初的'Nomefilm'值和预期的结果 – RomanPerekhrest

+5

正则表达式将是一个好开始。 –

+1

你可以在这里使用'regex''re.sub' –

回答

2

写功能来擦除目标字符串的任何列表。

def erase(s, target): 
    for t in target: 
     s = s.replace(t, '') 
    return s 

然后

TO_ERASE = ('.', '-', ',' , '(', ')', '[HD]', '2013', 
    ... 
    'Primafila 19', 
) 


Nomefilm = erase(Nomefilm, TO_ERASE) 

您还可以使用正则表达式(Python的re模块)的。例如,你可以删除所有字符串开头"Primafila "与数字量结束,并使用连字符

s = re.sub('Primafila\ [0-9\-]+', '', s) 

请注意,这是不完全一样的代码:它会很乐意把"Primafila 2345-------g""g"。它可能还需要你学习正则表达式的语法,它实际上是一种不同的语言(比Python更神秘)。但是,如果类似字符串的数量太大而不能以明智的方式提供,则将其作为单个表达式处理可能是更好的方法。

正则表达式可能非常强大。与"Primofila "匹配的正则表达式后跟一个或两个数字的数字,然后可选地使用单个连字符和另一个或两个数字的数字将是'Primofila\ [0-9]{1,2}(-[0-9]{1,2})?'