编码一种优雅的方式来剥离字符串

时间:2012-07-09 09:13:43

标签: c# string algorithm

我正在使用C#,并且在其中一个地方我获得了所有人名的列表,其电子邮件ID为

name(email)\n

我刚从脑袋里拿出这个子串的东西。我正在寻找更优雅,更快速(在访问时间方面,它执行的操作),易于记住的代码行来做到这一点。

string pattern =  "jackal(jackal@gmail.com)";
string email = pattern.SubString(pattern.indexOf("("),pattern.LastIndexOf(")") - pattern.indexOf("("));

//extra
string email =  pattern.Split('(',')')[1];

我认为执行上述操作会对每个字符进行顺序访问,直到找到该字符的索引。现在工作正常,因为名字很短,但是当有一个大名字时会很困难(希望人们没有名字)

2 个答案:

答案 0 :(得分:0)

一个肮脏的黑客就是让微软为你做这件事。

try
{
    new MailAddress(input);
    //valid
}
catch (Exception ex)
{
    // invalid
}

我希望他们能比定制的注册表做得更好。

维护一个处理所有事情的自定义注册表可能需要付出一些努力。

参考:MailAddress

您的格式实际上非常接近某些支持的格式。 ()中的文本被视为注释,但如果用<和&替换为>并获得支持的格式。

答案 1 :(得分:0)

Substring()中的第二个参数是要采用的字符串的长度,而不是结束索引。

您的代码应为:

string pattern = "jackal(jackal@gmail.com)";

int start = pattern.IndexOf("(") + 1;
int end = pattern.LastIndexOf(")");
string email = pattern.Substring(start, end - start);

或者,请查看Regular Expression to find a string included between two characters while EXCLUDING the delimiters