C# 用一种优雅的方式编写代码来剥离字符串

C# 用一种优雅的方式编写代码来剥离字符串,c#,string,algorithm,C#,String,Algorithm,我使用C语言,在其中一个地方,我得到了所有人的姓名列表,以及他们的电子邮件id的格式 名称电子邮件\n 我只是带着这副弦的东西来的。我正在寻找更优雅,在访问时间方面更快,它执行的操作,易于记忆的代码行来做到这一点 string pattern = "jackal(jackal@gmail.com)"; string email = pattern.SubString(pattern.indexOf("("),pattern.LastIndexOf(")") - pattern.indexOf(

我使用C语言,在其中一个地方,我得到了所有人的姓名列表,以及他们的电子邮件id的格式

名称电子邮件\n

我只是带着这副弦的东西来的。我正在寻找更优雅,在访问时间方面更快,它执行的操作,易于记忆的代码行来做到这一点

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

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

我认为执行上述操作将对每个字符进行顺序访问,直到找到该字符的索引。因为名字很短,现在可以用了,但是如果有一个大名的话会很困难希望人们没有一个

一个肮脏的黑客会让微软帮你做这件事

try
{
    new MailAddress(input);
    //valid
}
catch (Exception ex)
{
    // invalid
}
我希望他们能比定制的reg-ex做得更好

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

参考:

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

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

您的代码应为:

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

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

或者,看一看

我完全可以看出,在处理超过数百万个字符的名称时,这很困难。这看起来像是一个简单正则表达式的工作。使用lastIndexOf应该有一个-我想找到右括号。@Jon实用性只有在几个月后才能理解它lol@leppie我担心的不是使用它的人,这是一个人来破译它和任何复杂的事后。当然,这并不难,但它肯定不是非常清晰。