Необходимо заключить определенные части строки адресов электронной почты в кавычки - PullRequest
0 голосов
/ 11 января 2011

Имеется такая строка:

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 ]

1 голос
/ 11 января 2011

Вы можете полюбить регулярное выражение, и я уверен, что кто-то потратит время на его создание, но если вам нужно что-то, что имеет смысл:

# 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 голос
/ 11 января 2011

Вы можете сделать 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>

Удачи!

0 голосов
/ 11 января 2011

Создайте регулярное выражение, соответствующее «именам», и замените каждое вхождение в цикле той же строкой, заключенной в кавычки. Посмотрите на класс String и сопоставители регулярных выражений, особенно те, которые перебирают совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...