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();
        }

文字列をスペースでトークンに分割し、それらを 1 つずつ調べます。トークンが smtp で始まる場合、結果配列に追加されます。そうでない場合、そのトークンは次のトークンと連結されて 1 つのエントリが作成され、結果の配列に追加されます。スペースがあり、smtp で始まらないものは何でも動作するはずです。

于 2012-12-11T23:19:21.777 に答える
-1

次の行で作業を行う必要があると思います

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