2010-02-11 8 views
3

Je suis en train d'extraire des informations à partir d'une adresse e-mail comme si Ruby:Regex: Comment obtenir/extraire des informations d'un email en utilisant des expressions régulières (en ruby)?

Email: Joe Schmo <[email protected]> 

pour obtenir ces trois variables:

name = ? 
email = ? 
domain = ? 

J'ai essayé de chercher partout mais ne peut pas sembler trouver comment le faire correctement. Voici ce que j'ai jusqu'à présent:

the_email_line = "Email: Joe Schmo <[email protected]>" 

name = (/^Email\: (.+) <(.+)>@[A-Z0-9.-]+\.(.+)/).match(the_email_line)[1] 
email = (/^Email\: (.+) <(.+)>@[A-Z0-9.-]+\.(.+)/).match(the_email_line)[2] 
domain = (/^Email\: (.+) <(.+)>@[A-Z0-9.-]+\.(.+)/).match(the_email_line)[3] 

Une idée sur la façon d'obtenir ces trois variables correctement?

+1

Hormis le fait que l'expression rationnelle pour l'adresse e-mail est incomplète, vous devez affecter le résultat de '.match()' à une variable temporaire et l'indexer. –

+0

Merci Ignacio pour le pourboire! – sjsc

+0

L'utilisation de l'assignation parallèle devrait éliminer complètement la nécessité d'une variable temporaire (lancer le résultat de la correspondance à un tableau en premier). – bta

Répondre

5
/Email: (.+) <(.+?)@(.+)>/ 

Saisissez ensuite ce que vous voulez parmi les groupes de capture.

+0

Vous êtes génial! Merci Anon !! – sjsc

+0

En particulier, essayez 'factice, nom, domaine, email = (/ Email: (. +) <(.+?)@(.+)> /). Match (the_email_line) .to_a'. Vous pouvez jeter 'dummy' (juste une copie de la chaîne correspondante). – bta

+0

Mieux encore: 'nom, domaine, email = (/ Email: (. +) <(.+?)@(.+)> /). Match (the_email_line) .to_a [1..3]' – bta

Questions connexes