2011-01-11 86 views

回答

1

你可以做GSUB或扫​​描。无论哪种方式正则表达式是最优雅的。我建议您进行一次扫描,以便您可以选择通过每个电子邮件地址并执行任何您想要的操作(包括决定是否引用该名称)。

 
str = Bob Smith <[email protected]>, Jones, Rich A. <[email protected]> 
email_addrs = [] 

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

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

email_addrs.join(", ") #=> "Bob Smith" <[email protected]>, "Jones, Rich A." <[email protected]> 

祝你好运!

-1

构建一个与“名称”相匹配的正则表达式,并用括在引号中的相同字符串替换循环中的每个出现位置。查看String类和正则表达式匹配器,特别是迭代匹配的那些。

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 
+0

我不会低估这一点,但这不会处理名称中的引号。 – 2011-01-11 22:57:32

+0

@Andrew - 为什么?它会做什么呢? – sethvargo 2011-01-12 01:17:20