2013-03-20 162 views
1

我有一個包含多個元素,看起來像這樣一個巨大的名單:刪除所有字母和逗號從字符串

'A.21,48;B.64,91;C.95,125;D.139,166;E.175,200'

我想去除所有字母和; .字符和追加到一個列表,例如該列表看起來像['21','48','64','91','95','125','139','166','175','200']

我試着使用:

import re 
list.append(re.sub("\D","", <the string i am working on>)) 

但[R在這樣的列表中結果 - [' 21 48 64 91 95 125 139 166 175 200']

因爲我在一個非常大的文件循環內工作,一行代碼將真正有用。

謝謝

+0

爲了澄清,您希望單獨獲取數字而不是在一個空格分隔的塊中,對嗎?你想爲文件的每一行添加不同的子列表嗎? – 2013-03-20 21:16:00

+0

是的,我希望每個數字都是列表中的一個單獨的元素,將它添加到 – 2013-03-20 21:17:47

回答

3

您可以使用re.findall()

>>> import re 
>>> strs='A.21,48;B.64,91;C.95,125;D.139,166;E.175,200' 
>>> re.findall(r"\d+",strs) 
['21', '48', '64', '91', '95', '125', '139', '166', '175', '200'] 

使用re.sub()

>>> re.sub(r"[A-Z;,.]"," ",strs).split() 
['21', '48', '64', '91', '95', '125', '139', '166', '175', '200'] 

幫助(re.findall):

Help on function findall in module re: 

findall(pattern, string, flags=0) 
Return a list of all non-overlapping matches in the string. 

If one or more groups are present in the pattern, return a 
list of groups; this will be a list of tuples if the pattern 
has more than one group. 

Empty matches are included in the result. 
+1

完美!你能向我解釋代碼嗎? – 2013-03-20 21:14:36

+0

[這裏](http://docs.python.org/2/library/re.html#re.findall)是解釋。 – Mariano 2013-03-20 21:15:42

+0

@ begin.py'\ d +'將匹配字符串中的所有整數,'re.findall'將這些整數項存儲在列表中。 – 2013-03-20 21:21:13

相關問題