需要用引号括起一串电子邮件地址的某些部分

时间:2011-01-11 04:51:35

标签: ruby

给出如下字符串:

Bob Smith <bobsmith@gmail.com>, Jones, Rich A. <richjones@gmail.com>

我需要生成一个这样的字符串:

Bob Smith <bobsmith@gmail.com>, "Jones, Rich A." <richjones@gmail.com>

或者(如果这更容易):

"Bob Smith" <bobsmith@gmail.com>, "Jones, Rich A." <richjones@gmail.com>

在Ruby中最优雅的方法是什么?

3 个答案:

答案 0 :(得分:1)

你可以使用正则表达式,我相信有人会花时间建立一个,但如果你想要一些有意义的东西:

# s is the string
def add_quotes(s)
  s = s.split
  new_s = []
  s.each do |w|
    unless w.index('<') == 0 && w.index('>') == w.length-1
      new_s << "\"#{w}\""
    else
      new_s << w
    end
  end

  new_s.join(' ')
end

答案 1 :(得分:1)

您可以执行gsub或扫描。无论哪种方式,正则表达式都是最优雅的。我建议您进行扫描,这样您就可以选择浏览每个电子邮件地址并执行任何操作(包括决定是否引用该名称)。

str = Bob Smith <bobsmith@gmail.com>, Jones, Rich A. <richjones@gmail.com>
email_addrs = []

str.scan(/\s*(.*?)\s*<(.+?)>(?:,|\Z)/) do |match|
  # yields ["Bob Smith", "bobsmith@gmail.com"]
  # then   ["Jones, Rich A.", "richjones@gmail.com"]

  email_addrs << "\"#{match.first}\" <#{match.last}>"
end

email_addrs.join(", ") #=> "Bob Smith" <bobsmith@gmail.com>, "Jones, Rich A." <richjones@gmail.com>
祝你好运!

答案 2 :(得分:-1)

构建一个与“names”匹配的正则表达式,并用引号括起的相同字符串替换循环中的每个匹配项。查看String类和正则表达式匹配器,尤其是迭代匹配的那些。