2009-05-29 69 views
3

我有以下字符串解析在python

廣告ID:4028cb901dd9720a011e1160afbc01a3;網站ID:8a8ee4f720e6beb70120e6d8e08b0002;用戶名:5082a05c-015e-4266-9874-5dc6262da3e0

我需要的AdID,網站ID和用戶id只值。 裝置

4028cb901dd9720a011e1160afbc01a3

8a8ee4f720e6beb70120e6d8e08b0002

5082a05c-015e-4266-9874-5dc6262da3e0

所有3中不同的可變或以陣列,這樣我可以使用所有這三種

回答

1

你可以做這樣的事情:

input='adId:4028cb901dd9720a011e1160afbc01a3;siteId:8a8ee4f720e6beb70120e6d8e08b0002;userId:5082a05c-015e-4266-9874-5dc6262da3e0' 

result={} 
for pair in input.split(';'): 
    (key,value) = pair.split(':') 
    result[key] = value 

print result['adId'] 
print result['siteId'] 
print result['userId'] 
18

如果你不需要任何花哨的解析,你可以將它們分成字典:

In [2]: dict(kvpair.split(':') for kvpair in s.split(';')) 
Out[2]: 
{'adId': '4028cb901dd9720a011e1160afbc01a3', 
'siteId': '8a8ee4f720e6beb70120e6d8e08b0002', 
'userId': '5082a05c-015e-4266-9874-5dc6262da3e0'} 
+0

什麼用的中達[2]? – drozzy 2009-05-29 13:05:28

0

有一種非常棒的方法,稱爲split() python,它可以很好地爲你工作。我會建議使用它兩次,一次用於';'然後再爲每個使用':'的人使用。

1
matches = re.findall("([a-z0-9A-Z_]+):([a-zA-Z0-9\-]+);", buf) 

for m in matches: 
    #m[1] is adid and things 
    #m[2] is the long string. 

您還可以使用限制長度{32}像

([a-zA-Z0-9]+){32}; 

正則表達式讓你驗證的字符串,並將其分成組成部分。