2012-12-11 117 views
2

我有这个代理地址的字符串,它们被一个空格分开,但是x400和x500将空格处理到它们的地址中。什么是分割它的最佳方法。将它拆分成一个数组

例如

smtp:[email protected] smtp:[email protected] smtp:[email protected] X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen; SMTP:[email protected] 

预期结果:

smtp:[email protected] 
smtp:[email protected] 
smtp:[email protected] 
X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen; 
SMTP:[email protected] 

感谢,

EDIT,

 string mylist = "smtp:[email protected] smtp:[email protected] smtp:[email protected] X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen; SMTP:[email protected] X500:/o=Example/ou=USA/cn=Recipients of /cn=juser smtp:myaddress"; 

     string[] results = Regex.Split(mylist, @" +(?=\w+:)"); 
     foreach (string part in results) 
     { 
      Console.WriteLine(part); 
     } 

结果

smtp:[email protected] 
smtp:[email protected] 
smtp:[email protected] 
X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen; 
SMTP:[email protected] 
X500:/o=Example/ou=USA/cn=Recipients of /cn=juser 
smtp:myaddress 
+1

好吧,你可以在SMTP上分割,然后再添加它,或者是时候享受正则表达式了。 –

+0

获取smtp和x400,x400和下一个smtp之间的子字符串。 然后拆分单个字符串(实际上只有一个字符串..第一个子字符串)。 –

+0

OP - 你有控制输入吗? –

回答

5

下面是协议前,应符合空格的正则表达式。尝试将它变成Regex.Split像这样:

string[] results = Regex.Split(input, @" +(?=\w+:)"); 
+0

我选择这个是因为它简洁,谢谢 – m0dest0

-1

我认为以下行应该做的工作

var addrlist = variable.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries); 
+0

我不认为这将工作,因为A =后有一个空格。 –

+0

请在回答之前阅读问题。 –

1
int index = smtp.indexOf("X400") ; 
string[] smtps = smtpString.SubString(0,index).Split(" ") ; 
int secondIndex = smtpString.indexOf("SMTP"); 
string xfour = smtpString.substring(index,secondIndex); 
string lastString = smtpString.indexOf(secondIndex) ; 

应该工作,如果字符串格式是这样..如果我没有搞砸的指标。虽然你可能要检查指数不为-1

1

试试这个:

public static string[] SplitProxy(string text) 
     { 
      var list = new List<string>(); 
      var tokens = text.Split(new char[] { ' ' }); 
      var currentToken = new StringBuilder(); 

      foreach (var token in tokens) 
      { 
       if (token.ToLower().Substring(0, 4) == "smtp") 
       { 
        if (currentToken.Length > 0) 
        { 
         list.Add(currentToken.ToString()); 
         currentToken.Clear(); 
        } 

        list.Add(token); 
       } 
       else 
       { 
        currentToken.Append(token); 
       } 
      } 

      if (currentToken.Length > 0) 
         list.Add(currentToken.ToString()); 

      return list.ToArray(); 
     } 

它分裂空格为标记的字符串,然后通过逐一去。如果令牌以smtp开头,它将被添加到结果数组中。如果不是,那么该令牌会与下列令牌一起被创建为创建一个条目,而不是添加到结果数组中。应该处理任何有空格但不以smtp开头的东西。