2010-07-27 7 views

Répondre

1
>>> x = "[email protected]" 
>>> x.split("@")[1].split(".")[0] 
'host' 
>>> y = "[email protected]" 
>>> y.split("@")[1].split(".")[0] 
'host' 
>>> 

Il y aura une exception IndexError levée s'il n'y a pas de @ dans la chaîne.

1

Vous pouvez utiliser deux appels string.split, le premier utilisant '@' comme séparateur, le second utilisant '.'

+0

+1 Je pense que c'est vraiment la meilleure façon. Ni les solutions regex n'ont pas de chaîne de caractères sans @. – Toto

0

effectuez une division par '@', puis sous-chaîne.

1
host = re.search(r"@(\w+)(\.|$)", s).group(1) 
+0

Ne semble pas que ça marchera s'il n'y a pas de '.' après le' @ ' –

+0

@John Vous avez raison - l'a corrigé. – Amarghosh

+0

Nice one. J'ai ajouté un '|' après le '@' dans le cas où il n'y a pas de '@' – user14314

0

Voici une autre solution:

re.search("^.*@([^.]*).*", str).group(1) 

modifier: solution beaucoup mieux grâce au commentaire:

re.search("@([^.]*)[.]?", str).group(1) 
+0

(1) 're.search ("^. * X") 'est fonctionnellement équivalent à' re.search ("X") '[sauf en présence de newlines] et (comme implémenté) est horriblement plus lent si X n'est pas trouvé. (2) Le postérieur '. *' (Correspond à 0 ou plus de n'importe quel caractère [sauf un saut de ligne]) est totalement inutile. –

+0

Merci pour le commentaire. Ce sont les grandes choses à savoir. – Klark

+0

Tout motif final qui peut correspondre à 0 caractères est totalement inutile, que ce soit '. *' Ou '[.]?' Ou quelque chose d'autre - vous ne voulez pas ce qu'il contient, alors ne le mettez pas dedans. –

Questions connexes