需要使用Ruby代码仅收集电子邮件

时间:2018-04-14 00:23:05

标签: ruby-on-rails ruby rubygems

我已经收到了一封我想要投放电子邮件广告系列的电子邮件列表,但是,在列表中有一些网址......这会让事情变得复杂。

这是电子邮件地址的标准格式,例如:

news@ydr.com

我想将列表粘贴到终端并运行命令以仅捕获所有电子邮件地址并将其保存到文件并删除任何URL。

请指教!非常感谢:)

1 个答案:

答案 0 :(得分:1)

如果您只想捕捉大多数电子邮件,这个正则表达式可能会有效。 我从这里得到了这个正则表达式How to validate an email address using a regular expression? 他们谈论更复杂的RFC822电子邮件正则表达式

 #!/usr/bin/env ruby

input = $stdin.readlines # ctrl + D after paste
input.each do |f|
  puts f if f[/^[a-zA-Z0-9_.+\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/]
end

# test input
# foo@bar.com
# www.cnn.com
# test.email@go.com
# turdburgler@mcdo.net
# http://www.google.com

将电子邮件写入文件:

 #!/usr/bin/env ruby

file = File.open("emails.txt", "w")
input = $stdin.readlines # ctrl + D after paste
input.each do |f|
  file.write(f) if f[/^[a-zA-Z0-9_.+\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/]
end
file.close

为了清楚起见,这是一个应该像这样运行的ruby脚本。 将脚本另存为文件,即email_parser.rb

chmod +x email_parser.rb
./email_parser.rb # this will wait for stdin, here you paste the list in to the terminal

当终端挂机等待时,粘贴电子邮件列表,然后按ctrl + D告诉程序这是EOF。然后程序将运行电子邮件/网址和解析列表。如果使用更新的脚本,则输出将是一个文件。该文件将与您运行脚本的文件夹相同,并称为emails.txt