有人可以查看下面的代码并告诉我这是否真的是在“:”符号后解析文本的正确方法。
require 'yaml'
the_file = ARGV[0]
f = File.open(the_file)
content = f.read
r = Regexp.new(/((?=:).+)/)
emails = content.scan(r).uniq
puts YAML.dump(emails)
此脚本解析文本文件中的电子邮件地址以清除垃圾邮件。 TEXT:EMAIL_ADDRESS。
我正在尝试让我的脚本更有效率。所以我的所有ruby / regex脚本看起来都一样,只有不同的正则表达式模式。我在ruby中通过在这里和那里切割dpasting来编写它们,并且因为我在大多数服务器上都有ruby,因此在任何地方运行任何脚本都更容易。
任何帮助将不胜感激。
答案 0 :(得分:3)
如果您真的只想在第一个:
之后发短信,我就不会使用正则表达式。我会使用String#split
lines = File.readlines(the_file)
emails = lines.map { |line| line.split(':', 2).last }.uniq
答案 1 :(得分:1)
如果您只想要有效的电子邮件,我只会搜索捕获电子邮件的正则表达式:
email_regexp = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}/
puts YAML.dump(
File.read(ARGV[0]).scan(email_regexp)
)
答案 2 :(得分:0)
如果您知道冒号在电子邮件之前是左分隔符,而在右边是密切关注,那么您可以使用
:(.+[^)])
作为你的正则表达式来提取其中的任何内容。虽然有一些非常具体的电子邮件匹配regexen,这可能更合适(对于源文本较少'常规')