2016-08-20 19 views
0

我有去如下,例如对象的列表:卸下只有数字没有在字符串中影响到其他号码

['ref_2537_1_obj1', 'ref_8953_1_obj32', 'ref_1120_1_obj', 'ref_8919_1_obj143'] 

,我想去除存在于每个项目的最后数字在列表中,因此它应该是这样的:

['ref_2537_1_obj', 'ref_8953_1_obj', 'ref_1120_1_obj', 'ref_8919_1_obj'] 

不过,如果我尝试使用.isdigit,它会删除存在的其它号码。如果我要使用[:1],[:2][:3],它也似乎不是理想情况,因为您可以在我的示例中看到最后存在1-3位数字。

什么是最好的接近它的方式?

回答

2

您可以使用re.sub替换空白处的结尾数字(如果有的话)。

import re 
a=['ref_2537_1_obj1', 'ref_8953_1_obj32', 'ref_1120_1_obj', 'ref_8919_1_obj143'] 
print ([re.sub(r'\d*$','',i) for i in a]) 
+0

正如我在黄连木评论,我与ref_2537_1_obj14的出现在列表的最后名称项目中的一个变成ref_2537_1_obj15而不是有其数字带过..任何想法,为什么? – dissidia

+0

[检查此](http://rextester.com/ZPC18136)..它按预期工作。 –

+0

hmm ok ..也许是因为我正在尝试使用maya应用程序'cmds.rename',它不能按照预期的方式使用命令,尽管它确实有效... – dissidia

4

无需使用模式匹配(正则表达式)时rstrip足够(它的速度更快,更简单,更可读):

a=['ref_2537_1_obj1', 'ref_8953_1_obj32', 'ref_1120_1_obj', 'ref_8919_1_obj143'] 
print(i.rstrip("") for i in a) 
+1

您可能希望在您的号码列表中包含“0”,否则它会错过数字“10”。 – MattDMo

+1

如果我忘了数字是什么,可以在'import string'后面使用'a.rstrip(string.digits)'。不知道这是值得的... – SethMMorton

+1

'i.rstrip(...)' – Alexander

-1

由于格式始终是相同的,即OBJ然后一些数字,你可以可以只rindexj和切片:

In [5]: l = ['ref_2537_1_obj1', 'ref_8953_1_obj32', 'ref_1120_1_obj', 'ref_8919_1_obj143'] 

In [6]: [s[:s.rindex("j")+1] for s in l] 
Out[6]: ['ref_2537_1_obj', 'ref_8953_1_obj', 'ref_1120_1_obj', 'ref_8919_1_obj'] 

如果您想更新日Ë原始列表:

In [7]: l = ['ref_2537_1_obj1', 'ref_8953_1_obj32', 'ref_1120_1_obj', 'ref_8919_1_obj143'] 

In [8]: l[:] = (s[:s.rindex("j")+1] for s in l) 

In [9]: l 
Out[9]: ['ref_2537_1_obj', 'ref_8953_1_obj', 'ref_1120_1_obj', 'ref_8919_1_obj'] 
相关问题