正则表达式:如何使用正则表达式(ruby)从电子邮件中获取/提取信息?

正则表达式:如何使用正则表达式(ruby)从电子邮件中获取/提取信息?,ruby,regex,Ruby,Regex,我正试图从ruby中这样的电子邮件地址中提取信息: Email: Joe Schmo <joeschmo@abc123.com> 我试着到处找,但似乎找不到正确的方法。以下是我目前掌握的情况: the_email_line = "Email: Joe Schmo <joeschmo@abc123.com>" name = (/^Email\: (.+) <(.+)>@[A-Z0-9.-]+\.(.+)/).match(the_email_line)[1]

我正试图从ruby中这样的电子邮件地址中提取信息:

Email: Joe Schmo <joeschmo@abc123.com>
我试着到处找,但似乎找不到正确的方法。以下是我目前掌握的情况:

the_email_line = "Email: Joe Schmo <joeschmo@abc123.com>"

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]
the_email\u line=“email:Joe Schmo”
name=(/^Email\:(.+)@[A-Z0-9.-]+\(.+)/).match(电子邮件行)[1]
email=(/^email\:(.+)@[A-Z0-9.-]+\(.+)/).match(电子邮件行)[2]
域=(/^Email\:(.+)@[A-Z0-9.-]+\(.+)/).match(电子邮件行)[3]
你知道如何正确获取这三个变量吗?

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

然后从捕获组中获取您想要的内容。

抛开电子邮件地址的正则表达式不完整的事实不谈,您应该将
.match()
的结果分配给一个临时变量并对其编制索引。感谢Ignacio提供的提示!使用并行赋值应该完全消除对临时变量的需要(首先将匹配结果转换为数组)。是其中之一。它们并不都与ruby相关,但至少其中一些使用类似的regexp语法。如果你对正则表达式问题感兴趣,你可能想看看你是不是很棒!再次谢谢你!!特别是,请尝试
dummy、name、domain、email=(/email:(.+)/).match(电子邮件行).to_a
。您可以扔掉
dummy
(只是匹配字符串的副本)。更好的是:
名称、域、电子邮件=(/email:(.+)/)。匹配(电子邮件行)。到[1..3]
/Email: (.+) <(.+?)@(.+)>/