Ruby REGEX解析器

时间:2014-02-13 14:50:21

标签: ruby regex

有人可以查看下面的代码并告诉我这是否真的是在“:”符号后解析文本的正确方法。

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,因此在任何地方运行任何脚本都更容易。

任何帮助将不胜感激。

3 个答案:

答案 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,这可能更合适(对于源文本较少'常规')