我有这个代理地址字符串,它们用空格分隔,但是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
答案 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);