给出如下字符串:
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中最优雅的方法是什么?
答案 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
类和正则表达式匹配器,尤其是迭代匹配的那些。