2017-08-28 4 views
0

私は文字列のリストを持っていて、最後は_1234で終わるすべての文字列にしたいと考えています。1234は4桁の数字です。すべての要素を見つけ、実際に数字が何であるか、少なくとも最初に一致する要素を返し、4桁が何であるかを調べるのが理想的です。数字で終わるリスト内のPython find要素

例えば、私は

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

は私が取得したい持っている

['1024', '0510'] 

オーケー、これまで私が得た、_\d{4}$_1234にマッチし、マッチオブジェクトを返し、match_object.group(0)はマッチ実際あるだろう文字列。しかし、_\d{4}$を検索するより良い方法がありますが、_を除いて\d{4}を返すだけですか?それは数かない場合だけ、最後の4つの文字をご確認

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

+0

どの部分に助けが必要ですか?あなたは調べましたか? 'フィルター'? – 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

はこれを試してみてください。 は、ヨランが指摘した間違いを修正するためにlen(s) > 4を追加しました。

+3

これは単に間違っています... 's '[' 123 '、' asd_4421 '、' yello1234 '、' 1 ']' –

-2

は、このコードを試してみてください。

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

が、それはまったく動作しない場合でも、あなたは、ここで質問していくつかのコードの次の時間を表示してください。それは人々があなたを助けることをより容易にします。それが「AB2421」と一致しますので、\ Dはない数を意味し、

>>> 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) 

は罰金作品:あなたは任意の正規表現のないソリューションに興味があるなら

は、ここにリスト内包と方法です、 'D3 & 1345'などとなります。

関連する問題