2011-10-15 3 views
0

Je veux python pour analyser la chaîne "" utilisateur: 12345 Lieu: ny recherche »python comment analyser "utilisateur: 12345 Localisation: ny recherche"

Ensuite, je peux utiliser:

if "user" in string: 
.... 

if "location" in string: 
... 

Tout existant ? façon de le faire

+0

Parse à quoi? Quelle est l'attente de production? – Avaris

+0

analyser pour dict. –

+0

Vous pouvez déjà faire 'if" user "dans la chaîne:' avec une chaîne. –

Répondre

3

Bien e La version originale de la réponse d'unutbu était impressionnante, maintenant re semble un peu exagéré. Voici une plus simple:

>>> text = 'user:12345 location:ny search' 
>>> dict(pair.split(":") for pair in text.split() if ":" in pair) 
{'user': '12345', 'location': 'ny'} 

Edit:

Pour insérer "search" avec la clé "keyword":

>>> dict(([] if ":" in pair else ["keyword"]) + pair.split(":") for pair in text.split()) 
{'user': '12345', 'keyword': 'search', 'location': 'ny'} 
+0

puis-je obtenir un mot-clé: 'recherche'? –

+0

@Bin Chen: Voir ma modification. – Avaris

0

il pourrait y avoir une meilleure façon de le faire, mais ce que je suis venu avec:

mydict = {} 
for pair in mystring.split(' '): 
    parts = pair.split(':') 
    if len(parts)>1 
    mydict{parts[0]:parts[1] 

mais cette implique que ni les clés dict, ni les valeurs peuvent contenir des espaces. Séparer les paires par des virgules pourrait résoudre ce problème.

La chose optimale à faire serait de coder et décoder comme JSON, ce qui en ferait ressembler à ceci:

utilisateur: { « user_id »: 1234, « location »: « ma recherche »}

les bibliothèques Python standard contiennent un json encoding and decoding lib.

0

une solution simple et directe si la chaîne est toujours dans ce format:

if string.find('user:') > -1: 
    user = string[string.find('user:' + len('user:'):string.find('location:') - 1] 
    .... 
if string.find('location:') > -1: 
    location = string[string.find('location:') + len('location:')] 
    ... 
Questions connexes