2011-01-11 90 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

相關問題