2

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

例如

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

4 回答 4

5

这是一个应该匹配协议前空格的正则表达式。尝试像这样插入它Regex.Split

string[] results = Regex.Split(input, @" +(?=\w+:)");
于 2012-12-11T23:06:34.610 回答
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

于 2012-12-11T23:10:33.883 回答
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 开头的东西。

于 2012-12-11T23:19:21.777 回答
-1

我认为以下行应该可以完成工作

var addrlist = variable.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries);
于 2012-12-11T23:00:35.090 回答