Разбор получателей Exchange из строки с помощью Regex

Я собираюсь разбить это на две операции, так как я не могу понять регулярное выражение, чтобы сделать это за одну. Тем не менее, я подумал, что попрошу мозговой трест посмотреть, сможет ли кто-нибудь это сделать (а я уверен, что кто-то может).

По сути, у меня есть строка, содержащая поле получателей из электронной почты в Exchange. Я хочу разобрать его на отдельных получателей. Мне не нужно проверять электронную почту или что-то в этом роде. По сути, данные разделены запятыми, за исключением случаев, когда запятая находится между набором кавычек. Это та часть, которая меня смущает.

Сейчас я использую: (?"[^"\r\n]*")

Что дает мне имена в кавычках и ([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3} .[0-9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9 ]{1,3})

который дает мне адреса электронной почты

Вот что у меня есть. Данные:

"George Washington" <[email protected]>, "Abraham Lincoln" <[email protected]>, "Carter, Jimmy" <[email protected]>, "Nixon, Richard M." <[email protected]>

Что я хотел бы получить обратно, так это:

"George Washington" <[email protected]>
"Abraham Lincoln" <[email protected]>
"Carter, Jimmy" <[email protected]>
"Nixon, Richard M." <[email protected]>

person Ed Kramer    schedule 08.05.2013    source источник


Ответы (1)


Я недостаточно знаю об обмене, чтобы получить шаблон, который будет соответствовать любым записям получателей обмена.

Но исходя из информации прошлого для вас в качестве примера. Я даю вам это:

["][^"]+["][^",]+(?=[,]?)

Это соответствует всем для записей, которые вы публикуете.

И знаете простой пример на С#, как использовать:

var input = "\"George Washington\" <[email protected]>, \"Abraham Lincoln\" <[email protected]>, \"Carter, Jimmy\" <[email protected]>, \"Nixon, Richard M.\" <[email protected]>";

var pattern = "[\"][^\"]+[\"][^\",]+(?=[,]?)";

var items = Regex.Matches(input, pattern)
    .Cast<Match>()
    .Select(s => s.Value)
    .ToList();

Если есть входной текст, что этот шаблон не работает, опубликуйте его здесь.

person Jonny Piazzi    schedule 08.05.2013
comment
Спасибо... Да, моя проблема не в том, чтобы использовать их в коде, а в самих регулярных выражениях. Я еще не совсем ниндзя с ними. Но я взял то, что вы опубликовали, и вставил его в Expresso вместе с образцами данных, и он прекрасно проанализировал их все, включая только что обнаруженное нами, которое испортило мое исходное регулярное выражение. [email protected][email protected] - person Ed Kramer; 09.05.2013
comment
Давайте посмотрим, смогу ли я прочитать это... [] // Соответствует любому символу в этом классе [^]+ // Соответствует одному или нескольким любым символам, не принадлежащим к этому классу... Так что это будет соответствовать чему угодно, начиная с символа . Тогда у нас есть: [] // Опять же, соответствует любому символу в классе. [^,]+ // Соответствует одному или нескольким любым символам, не принадлежащим к этому классу. Это соответствует части отображаемого имени... - person Ed Kramer; 09.05.2013
comment
(?=[,]?) // Соответствует суффиксу из нуля или более символов в классе, в данном случае это запятая, но исключается. символа к другому символу, а затем все до символа aa , но не включая запятую. Это правильная интерпретация? (очевидно, он получает правильные данные) - person Ed Kramer; 09.05.2013
comment
Да вы прекрасно понимаете. - person Jonny Piazzi; 10.05.2013