2017-08-28 610 views
0

我有一個字符串列表,我希望所有字符串以_1234結尾,其中1234可以是任何4位數字。找到所有元素以及數字實際是什麼,或者至少返回第一個匹配元素以及4位數字是理想的。Python找到列表中以數字結尾的元素

例如,我有

['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765'] 

我想

['1024', '0510'] 

好了,到目前爲止我,_\d{4}$將匹配_1234,並返回匹配對象,而match_object.group(0)是實際匹配串。但有沒有更好的方式來尋找_\d{4}$但只返回\d{4}沒有_

+0

哪部分需要幫助?你看過嗎? 'filter'? – Carcigenicate

+2

你能告訴你試過了什麼嗎?這個問題目前要廣泛。 –

+2

看看'split'和'len'和'isdigit' ...或者're'模塊 –

回答

1

re.search()使用:

import re 

lst = ['A', 'BB_1024', 'CQ_2', 'x_0510'] 
newlst = [] 

for item in lst: 
    match = re.search(r'_(\d{4})\Z', item) 
    if match: 
     newlst.append(match.group(1)) 

print(newlst) # ['1024', '0510'] 

至於正則表達式,圖案在字符串的末尾的下劃線和是4個位數相匹配,僅捕捉數字(注意括號)。被捕獲的組可以通過match.group(1)訪問(請記住group(0)是整個比賽)。

-1

試試這個:

[s[-4:] for s in lst if s[-4:].isdigit() and len(s) > 4] 

只是檢查的最後四個字符,如果它是一個數字或沒有。 增加了len(s) > 4來糾正Joran指出的錯誤。

+3

這根本就是錯的......考慮's = ['123','asd_4421','yello1234','1']' –

-2

試試這個代碼:

r = re.compile(".*?([0-9]+)$") 
newlist = filter(r.match, mylist) 
print newlist 
0

請出示你在這裏問一個問題,即使它不工作的一些代碼下一次。它使人們更容易幫助你。

如果你有興趣,沒有任何正則表達式的解決方案,在這裏與列表理解方式:

>>> data = ['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765'] 
>>> endings = [text.split('_')[-1] for text in data] 
>>> endings 
['A', '1024', '2', '0510', '98765'] 
>>> [x for x in endings if x.isdigit() and len(x)==4] 
['1024', '0510'] 
1
import re 

src = ['A', 'BB_1024', 'CQ_2', 'x_0510', 'y_98765', 'AB2421', 'D3&1345'] 

res = [] 
p = re.compile('.*\D(\d{4})$') 
for s in src: 
    m = p.match(s) 
    if m: 
     res.append(m.group(1)) 

print(res) 

做工精細,\ d意味着不是一個數字,所以它將匹配「AB2421」 ,'D3 & 1345'等。

相關問題