将其拆分为数组

时间:2012-12-11 22:55:52

标签: c# string

我有这个代理地址字符串,它们用空格分隔,但是x400和x500将空格处理到它们的地址中。什么是拆分它的最佳方法。

e.g。

smtp:john@a-mygot.com smtp:john@b-mygot.com smtp:john@c-mygot.com X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen; SMTP:john@mygot.com 

预期结果:

smtp:john@a-mygot.com
smtp:john@b-mygot.com
smtp:john@c-mygot.com
X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen;
SMTP:john@mygot.com

感谢,

编辑,

        string mylist = "smtp:john@a-mygot.com smtp:john@b-mygot.com smtp:john@c-mygot.com X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen; SMTP:john@mygot.com 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:john@a-mygot.com
smtp:john@b-mygot.com
smtp:john@c-mygot.com
X400:C=us;A= ;P=mygot;O=Exchange;S=John;G=Gleen;
SMTP:john@mygot.com
X500:/o=Example/ou=USA/cn=Recipients of  /cn=juser
smtp:myaddress

4 个答案:

答案 0 :(得分:5)

这是一个应该与协议之前的空格匹配的正则表达式。尝试将其插入Regex.Split,如下所示:

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

答案 1 :(得分: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

答案 2 :(得分: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开头的东西。

答案 3 :(得分:-1)

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

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