2014-12-04 43 views
0

我做對數據庫的一些疑問,那將返回類似如下 -蟒蛇爲每個匹配的字符串複製到一個數組

string = 'T=1 ID=56494759 DID=583887 O=N M=N J=76732 R=0 P=1 S=101 WR=N T=1 ID=56494760 DID=418400 O=N M=N J=48064 R=14780471 P=1 S=101 WR=N T=1 ID=56494761 DID=583889 O=N M=N J=76733 R=0 P=1 S=101 WR=N ' 

我希望能夠做的是任何地方說ID=我想要它後面的整數。並追加他們進入這樣一個數組 -

array = [56494759, 56494760, 56494761] 

從那裏,我知道如何做休息,我需要做的(使用每個值在陣列中運行對DB一個單獨的查詢)。

+0

[正則表達式(https://docs.python.org/2/library/re.html)可以幫助這裏。 – Rufflewind 2014-12-04 02:43:23

回答

1

Somethign這樣的:

string = 'T=1 ID=56494759 DID=583887 O=N M=N J=76732 R=0 P=1 S=101 WR=N T=1 ID=56494760 DID=418400 O=N M=N J=48064 R=14780471 P=1 S=101 WR=N T=1 ID=56494761 DID=583889 O=N M=N J=76733 R=0 P=1 S=101 WR=N ' 


import re 

print(re.findall(r'\sID=(\d+)', string)) 

結果:

['56494759', '56494760', '56494761'] 
+0

有沒有什麼辦法不能得到DID?也許序言r'ID ='? – whoisearth 2014-12-04 02:45:59

+0

@whoisearth我糾正了答案。 – Marcin 2014-12-04 02:46:16

+0

謝謝!實際上,奇怪也似乎DB在ID之前有一個隱藏的字符,所以我實際上必須這樣做 - r'xID =(\ d +)' x是SOH字符。隱藏到unicode,但它的程序使用它作爲種類的字符中斷。 – whoisearth 2014-12-04 02:48:57

0
myString = 'T=1 ID=56494759 DID=583887 O=N M=N J=76732 R=0 P=1 S=101 WR=N T=1 ID=56494760 DID=418400 O=N M=N J=48064 R=14780471 P=1 S=101 WR=N T=1 ID=56494761 DID=583889 O=N M=N J=76733 R=0 P=1 S=101 WR=N ' 
array = [each.split('=')[1] for each in myString.split() if each.startswith('ID=')] 
print array 

結果:

['56494759', '56494760', '56494761'] 
0

使用map一個班輪...

filter(None, map(lambda x: None if x[0]!='ID' else x[1], map(lambda y: y.split('='), string.split()))) 

或者使用reduce這可能是一個有點清晰:

reduce(lambda ids, x: ids + [x[1]] if x[0]=='ID' else ids, map(lambda x: x.split('='), string.split(' ')), [])