2009-01-12 5 views
2

Disons que nous avons cette chaîne: [18] [email protected]:pwd:Comment séparer l'adresse email/mot de passe en deux en Python?

[email protected] est l'e-mail et le mot de passe est pwd.

De plus, disons que nous avons cette variable avec une valeur

f = "[18] [email protected]:pwd:" 

Je voudrais savoir s'il y a un moyen de faire deux autres variables nommées var1 et var2, où la variable var1 prendra exactement email info from variable f et var2 le mot de passe exact info de var2.

Le résultat après l'exécution de l'application devrait être comme:

var1 = "[email protected]" 

et

var2 = "pwd" 

Répondre

9
>>> var1, var2, _ = "[18] [email protected]:pwd:"[5:].split(":") 
>>> var1, var2 
('[email protected]', 'pwd') 

Ou si le "[18]" est pas un préfixe fixe:

>>> var1, var2, _ = "[18] [email protected]:pwd:".split("] ")[1].split(":") 
>>> var1, var2 
('[email protected]', 'pwd') 
+0

Nice, J'allais suggérer deux divisions. Quelle est la syntaxe [4:] appelée? –

+0

@Bill Syntaxe Slice. –

+0

Merci. Après Google, ce terme semble assez fondamental en Python. Je suppose que j'ai besoin d'ajouter "Learning Python" à ma pile de livres à lire. –

7
import re 
var1, var2 = re.findall(r'\s(.*?):(.*):', f)[0] 

Si findall() [0] se sent comme deux pas en avant et un arrière:

var1, var2 = re.search(r'\s(.*?):(.*):', f).groups() 
+0

+1. Une bonne solution générale. –

+0

Peut également vouloir ajouter un contrôle de correspondance. Par exemple, si re.search renvoie None, vous obtiendrez une petite erreur pour essayer la méthode groups() sur un objet NoneType. Dans l'ensemble, une bonne solution si PEZ. +1 –

+0

're.search (r '\ s ([^: \ s] +): ([^: \ n] *):')' – jfs

5
var1, var2 = re.split(r'[ :]', f)[1:3] 
1

Pour diviser le premier colon ":", vous pouvez le faire:

# keep all after last space 
f1= f.rpartition(" ")[2] 
var1, _, var2= f1.partition(":") 
+0

+1 pour la répartition. Je ne savais pas à ce sujet. – PEZ

Questions connexes