2016-08-20 52 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'] 
相關問題