Как я могу разбить эту строку в массив? - PullRequest
5 голосов
/ 27 января 2009

Моя строка выглядит следующим образом:

smtp:jblack@test.com;SMTP:jb@test.com;X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;

Мне нужно обратно:

smtp:jblack@test.com
SMTP:jb@test.com
X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;

Проблема в том, что точки с запятой разделяют адреса, а также часть адреса X400. Кто-нибудь может подсказать, как лучше разделить это?

PS Я должен упомянуть, что порядок отличается, поэтому он может быть:

X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;;smtp:jblack@test.com;SMTP:jb@test.com

Может быть более 3 адресов, 4, 5 .. 10 и т. Д., Включая адрес X500, однако все они начинаются с smtp: SMTP: X400 или X500.

Ответы [ 12 ]

0 голосов
/ 27 января 2009

Попробуйте эти регулярные выражения. Вы можете извлечь то, что вы ищете, используя именованные группы.

X400:(?<X400>.*?)(?:smtp|SMTP|$)
smtp:(?<smtp>.*?)(?:;+|$)
SMTP:(?<SMTP>.*?)(?:;+|$)

Убедитесь, что при их создании вы указываете без учета регистра. Кажется, они работают с образцами, которые вы дали

0 голосов
/ 27 января 2009

Делите точку с запятой (;), разделяя и затем перебирая результат, повторно комбинируя каждый элемент, в котором нет двоеточия (:), с предыдущим элементом.

string input = "X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G="
  +"Black;;smtp:jblack@test.com;SMTP:jb@test.com";

string[] rawSplit = input.Split(';');

List<string> result = new List<string>();
  //now the fun begins
string buffer = string.Empty;
foreach (string s in rawSplit)
{
  if (buffer == string.Empty)
  {
    buffer = s;
  }
  else if (s.Contains(':'))
  {   
    result.Add(buffer);
    buffer = s;
  }
  else
  {
    buffer += ";" + s;
  }
}
result.Add(buffer);

foreach (string s in result)
  Console.WriteLine(s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...