2009-05-29 15 views
3

Je chaîne suivanteanalyse syntaxique en python

ADID: 4028cb901dd9720a011e1160afbc01a3; siteId: 8a8ee4f720e6beb70120e6d8e08b0002; userId: 5082a05c-015E-4266-9874-5dc6262da3e0

j'ai besoin que la valeur de ADID, siteId et userId. signifie

4028cb901dd9720a011e1160afbc01a3

8a8ee4f720e6beb70120e6d8e08b0002

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

tous les trois dans la variable ou un autre dans un réseau afin que je puisse utiliser tous les trois

Répondre

1

Vous pouvez faire quelque chose comme ceci:

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

Vous pouvez les diviser en un dictionnaire si vous n'avez pas besoin d'analyse syntaxique:

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

quoi de neuf In [2]? – drozzy

+0

C'est un copier coller à partir du shell interactif ipython. –

0

Il existe une méthode géniale appelée split() pour python qui fonctionnera bien pour vous. Je suggère de l'utiliser deux fois, une fois pour ';' puis encore pour chacun de ceux utilisant ':'.

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. 

Vous pouvez également limiter les longueurs en utilisant {32} comme

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

Les expressions régulières permettent de validate la chaîne et le diviser en composants.

Questions connexes